2013 国庆第一场(The 2011 Rocky Mountain Regional Contest)

来源:互联网 发布:智者 观一叶而知秋 编辑:程序博客网 时间:2024/06/05 01:01

题目:hdu4161-4170

Iterated Difference:

绝对暴力,可是比赛时写出代码,wa了三次,因为中间输出忘了注释,这写代码功底是差到家了,很少能一气呵成,不出错误。还是思路不够清晰明了。

#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<algorithm>#include<cmath>using namespace std;int a[50];int b[50];int main(){    int n;    int cas=0;    int step;    while(cin>>n&&n)    {        step=0;        for(int i=0;i<n;i++)        {            scanf("%d",&a[i]);            b[i]=a[i];        }        int flag=0;        sort(b,b+n);        if(b[0]==b[n-1])        {           // cout<<"hehe"<<endl;            flag=1;            step=0;        }        else        {            int t;            for(int j=1;j<=1000;j++)            {                step++;                t=a[0];                for(int i=0;i<n-1;i++)                {                    a[i]=abs(a[i]-a[i+1]);                    b[i]=a[i];                }                a[n-1]=abs(a[n-1]-t);                b[n-1]=a[n-1];                sort(b,b+n);                if(b[0]==b[n-1])                {                    flag=1;                    break;                }            }        }        printf("Case %d: ",++cas);        if(flag==0)            printf("not attained\n");        else            printf("%d iterations\n",step);    }    return 0;}
Stock Prices:

大水题,排序一下就行

#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<algorithm>#include<cmath>using namespace std;struct node{    int a;    int order;}s[1100000];bool cmp(node x,node y){    if(x.a==y.a)        return x.order<y.order;    else        return x.a<y.a;}int b1[110];int b2[110];int main(){    int n,k1,k2,i;    int cas=0;    while(scanf("%d%d%d",&n,&k1,&k2)&&n&&k1&&k2)    {        for(i=1;i<=n;i++)        {            scanf("%d",&s[i].a);            s[i].order=i;        }        sort(s+1,s+1+n,cmp);        printf("Case %d\n",++cas);        for(i=1;i<=k1;i++)            b1[i]=s[i].order;        sort(b1+1,b1+1+k1);        for(i=1;i<=k1;i++)        {            cout<<b1[i];            if(i!=k1)                cout<<" ";        }        cout<<endl;        for(i=n;i>n-k2;i--)            b2[n-i]=s[i].order;        sort(b2,b2+k2);        for(i=k2-1;i>=0;i--)        {            cout<<b2[i];            if(i!=0)                cout<<" ";        }        cout<<endl;    }    return 0;}

Pills:

题意就是:n个w和n个h组成一个排列,对于任意前i(i>=1&&i<=2*n)个字符,w的个数大于等于h的个数。   裸卡特兰数,之前有做过0,1排列的,还是一下没有反应过来。

#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<algorithm>#include<cmath>using namespace std;struct node{    int a;    int order;}s[1100000];bool cmp(node x,node y){    if(x.a==y.a)        return x.order<y.order;    else        return x.a<y.a;}int b1[110];int b2[110];int main(){    int n,k1,k2,i;    int cas=0;    while(scanf("%d%d%d",&n,&k1,&k2)&&n&&k1&&k2)    {        for(i=1;i<=n;i++)        {            scanf("%d",&s[i].a);            s[i].order=i;        }        sort(s+1,s+1+n,cmp);        printf("Case %d\n",++cas);        for(i=1;i<=k1;i++)            b1[i]=s[i].order;        sort(b1+1,b1+1+k1);        for(i=1;i<=k1;i++)        {            cout<<b1[i];            if(i!=k1)                cout<<" ";        }        cout<<endl;        for(i=n;i>n-k2;i--)            b2[n-i]=s[i].order;        sort(b2,b2+k2);        for(i=k2-1;i>=0;i--)        {            cout<<b2[i];            if(i!=0)                cout<<" ";        }        cout<<endl;    }    return 0;}

User Names:

算是if,else 问题,又是敲完出了好多bug,中间参数竟然传错了,后来输入有问题,原来是样例的问题,每个样例都多了一个空格。经过各路帮助,解决了。

#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<algorithm>#include<cmath>#include<map>#include<set>using namespace std;map<string,int > mp;char s[1000][100];string ss[1100];int main(){    int cas=0;    int n,k;    while(scanf("%d%d",&n,&k)&&n&&k)    {        mp.clear();//        getchar();        char c;        while((c=getchar())!='\n') ;        for(int i=0;i<n;i++)        {            gets(s[i]);//            cout<<s[i]<<endl;        }        for(int i=0;i<n;i++)        {            ss[i]="";            int len=strlen(s[i]);            int j=0;            while(s[i][j]=='-'||s[i][j]=='\'')            {                j++;               // cout<<"j"<<j<<endl;            }            if(s[i][j]>='A'&&s[i][j]<='Z')                s[i][j]+=32;            ss[i]+=s[i][j];            //cout<<ss[i]<<endl;            for(j=len-1;j>=0;j--)            {                if(s[i][j]==' ')                    break;            }            j++;           // cout<<"je  j:"<<j<<endl;            int lenth=1;            while(j<len&&lenth<k)            {                if(s[i][j]=='-'||s[i][j]=='\'')                {                    j++;                    continue;                }                if(s[i][j]>='A'&&s[i][j]<='Z')                    s[i][j]+=32;                ss[i]+=s[i][j];                j++;                lenth++;            }            mp[ss[i]]++;            int ret=mp[ss[i]];            if(ret>1)            {                //cout<<i<<"hehe"<<endl;                ret--;                //cout<<"ret"<<ret<<endl;                int ll=ss[i].length();                if(ll<k&&ret<10)                {                    ss[i]+=(ret+'0');                }                else if(ll<k-1)                {                    if(ret/10!=0)                        ss[i]+=(ret/10+'0');                    ss[i]+=(ret%10+'0');                }                else                {                    if(ll==k&&ret<10)                    {                        //cout<<"hahha"<<endl;                        ss[i][ll-1]=(ret+'0');                       // cout<<"11"<<endl;                        //cout<<ss[i][ll-1]<<endl;                        //cout<<ss[i]<<endl;                    }                    else if(ll==k&&ret>=10)                    {                        ss[i][ll-1]=(ret%10+'0');                        ss[i][ll-2]=(ret/10+'0');                    }                    else if(ll==k-1&&ret>=10)                    {                        ss[i][ll-1]=(ret/10+'0');                        ss[i]+=(ret%10+'0');                    }                }            }        }        printf("Case %d\n",++cas);        for(int i=0;i<n;i++)        {            cout<<ss[i]<<endl;        }    }    return 0;}




原创粉丝点击