2012 金华赛区现场赛

来源:互联网 发布:怎么在超星数据库撤稿 编辑:程序博客网 时间:2024/06/10 06:34

A这道题做过几次,很简单,主要是排序

hdu 4442

#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<algorithm>#include<cmath>using namespace std;#define mod 31536000struct node{    __int64 a;    __int64 b;}s[100010];long long cmp(node x,node y){    return 1.0*x.a*y.b<1.0*y.a*x.b;}int main(){    int n;    int i,j,k;    __int64 sum=0,ans=0;    while(scanf("%d",&n))    {        if(n==0)            break;        sum=0;        ans=0;        for(i=0;i<n;i++)        {            scanf("%d%d",&s[i].a,&s[i].b);            //cin>>s[i].a>>s[i].b;        }        sort(s,s+n,cmp);        ans=s[0].a;        sum=s[0].a;        for(i=1;i<n;i++)        {            ans=((sum*s[i].b)%mod+s[i].a%mod)%mod;            sum=(sum+ans)%mod;   //因为这句话WA了几次,细节问题        }        printf("%I64d\n",sum);    }    return 0;}


 

D  真是可悲,这么一道水题,我搞了半天,一直理解错题意,原来坦克一旦固定一个角度就不能再动了。

    因为精度问题也WA了几次,要使用double

#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<algorithm>#include<cmath>using namespace std;double h,l1,r1,l2,r2,v[500];#define g 9.8#define pi acos(-1.0)int n;int ff(double x){    int ret=0;    for(int i=0;i<n;i++)    {        double vx0=v[i]*cos(x);        double vy0=v[i]*sin(x);        double vy1=sqrt(2*g*h+vy0*vy0);        double t=(vy1-vy0)/g;        double xdis=t*vx0;        if(xdis>=l2&&xdis<=r2)return 0;        if(xdis>=l1&&xdis<=r1)  ret++;    }    return ret;}int main(){    while(cin>>n)    {        int sum=0;        if(n==0)            break;        cin>>h>>l1>>r1>>l2>>r2;        for(int i=0;i<n;i++)        {            cin>>v[i];        }        double add=pi/(2000);        double x;        sum=0;        for(x=-pi/2;x<=pi/2;x+=add)        {            sum=max(sum,ff(x));        }        cout<<sum<<endl;    }    return 0;}


 I

这题是真心水,不知道现场赛有这么水的题,所以平时要强加训练,赛场心理素质要好,这样才能发挥出水平。

 

#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<algorithm>#include<queue>#include<cmath>using namespace std;int a[200];int main(){    int n;    while(cin>>n)    {        int sum=0;        if(n==0)            break;        for(int i=0;i<n;i++)        {            cin>>a[i];            sum+=(a[i]*a[i]);        }        cout<<sum<<endl;    }    return 0;}


J

又是一道水体,千万别多想,只要记录对于每条Pant可以搭配的 上衣a[i]和鞋子b[i] 就行了,然后a[i]*b[i]相加就行了。计算一下,复杂度只有O(N);

#include<iostream>#include<cstdio>#include<string>#include<cstring>using namespace std;char s1[1000005][10];char s2[1000005][10];int a,b;int ans1[1100];int ans2[1100];int main(){    int m,n,k,p;    int i;    while(scanf("%d%d%d",&m,&n,&k))    {        if(m==0&&n==0&&k==0)            break;        for(i=1;i<=n;i++)            ans1[i]=m;        for(i=1;i<=n;i++)            ans2[i]=k;        int cot1=0,cot2=0;        scanf("%d",&p);        for(i=0;i<p;i++)        {            scanf("%s%d%s%d",s1[i],&a,s2[i],&b);            if(s2[i][0]=='p')                ans1[b]-=1;            else if(s1[i][0]=='p')                ans2[a]-=1;        }        int sum=0;        for(i=1;i<=n;i++)        {            sum+=(ans1[i]*ans2[i]);        }        printf("%d\n",sum);    }    return 0;}