您的位置:首页 > 其它

codeforces 280,281(Round #172)题解

2013-03-13 11:04 295 查看
2A:没什么可说的,大水题

2B:这个很郁闷,朴素的模拟,但是比赛时忘了精度问题挂了,桑心>_<,也是水题,我是通分然后模拟做的。但是强大的py直接由函数,郁闷T_T

2C(1A):平几题,唯一麻烦的是由两种情况,一种是有几个三角形的,另一种是只存在平行四边形,邻接情况需要计算。(据说正解是半平面交?不清楚)我设的是两种三角形的斜边长,解二元一次方程,上代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<cmath>
using namespace std;
const long double Pi=3.1415926535897932384626433832795028841971;
//x(1+cosa)+ysina=w
//y(1+cosa)+asina=h
int main()
{

long double w,h,a;
long double ans;
cin>>w>>h>>a;
if(w<h) swap(w,h);
if(a>90) a=180-a;
if(a==90)
{
ans=min(w,h)*min(w,h);
cout.precision(9);
cout<<fixed<<ans<<endl;return 0;
}
double hu=a*Pi/180;
if(tan(hu)*(w*w-h*h)<2*w*h) //八边形
{
long double m=1.0+cos(hu);
long double n=sin(hu);
long double x,y;
x=(m*w-n*h)/(m*m-n*n);
y=(m*h-n*w)/(m*m-n*n);
ans=w*h-x*x/2*sin(2*hu)-y*y/2*sin(2*hu);
}
else
{
ans=h*h/sin(hu);
}
cout.precision(9);
cout<<fixed<<ans<<endl;
return 0;
}
2D(1B):这题很水,主要到只需要最大和次大,很容易想到单调栈,每次入栈元素是X的时候,把栈中比x小的边弹栈边计算,因为后面一定用不到,比x大的计算但不弹栈,因为后面会用到,这样做即可。

2E(1C):个人觉得这道题很难,想了好久。我们最后要计算的是E(总操作次数)=sigma{E([每个结点u是因为选中了自己而删去的])},两者相等的原因是他们包含了所有情况。而每个节点u是因为选中自己被删去还是因为选中祖先被删去,与其他链无关,只与自己在树中的深度有关,于是结论出来了,个点深度的倒数和即为答案,好题!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: