Coder-Strike 2014 - Round 1

来源:互联网 发布:公司网络时断时续 编辑:程序博客网 时间:2024/06/10 05:41

http://codeforces.com/contest/412

最大的感悟就是真为我的英语捉急~~

A:要是2*k<=n,就先把梯子移到最左边,然后在按个右移,print,反之,先右移,再左移

B:从大到小排序,输出s[k]

C:按个比较,要是与先前结果相同continue,都是字母但不同为?,与字母不同并且不是?,就是x

D:拓扑排序,倒着输出

E:邮件adress的标准,字母/数字/_(但只有字母有效,此处邮件名不能以_/数字开始)@字母.字母;然后计算@前的字母数与.后的字母数,相乘求和

A:

#include <iostream>#include <cstdio>#include<cstring>using namespace std;const int M=150;char s[M];int vis[M];int main(){    int n,k,i,j;    while(~scanf("%d%d",&n,&k))    {        scanf("%s",s+1);        int len=strlen(s+1);        if(2*k<=n)///left        {            for(i=0;i<k-1;i++)                printf("LEFT\n");            printf("PRINT %c\n",s[1]);            i=2;            while(i<=len)            {                printf("RIGHT\n");                printf("PRINT %c\n",s[i]);                i++;            }        }        else ///left        {            for(i=0;i<len-k;i++)                printf("RIGHT\n");            printf("PRINT %c\n",s[len]);            i=len-1;            while(i>=1)            {                printf("LEFT\n");                printf("PRINT %c\n",s[i]);                i--;            }        }    }    return 0;}

B:

#include <iostream>#include <cstring>#include <cstdio>#include <cmath>#include <algorithm>#include <map>#include <queue>#include <set>#include <vector>#include <stack>using namespace std;const int M=150;int s[M];int cmp(int a,int b){    return a>b;}int main(){    int n,k,i,j;    while(~scanf("%d%d",&n,&k))    {        for(i=0;i<n;i++)            scanf("%d",&s[i]);        sort(s,s+n,cmp);        printf("%d\n",s[k-1]);    }    return 0;}

C:

#include <iostream>#include <cstring>#include <cstdio>#include <cmath>#include <algorithm>#include <map>#include <queue>#include <set>#include <vector>#include <stack>using namespace std;const int M=100005;char  ans[M],s[M];int main(){    int n,i,j,k;    while(~scanf("%d",&n))    {        int len;        for(i=0;i<n;i++)        {            scanf("%s",s);            len =strlen(s);            if(i==0)            {                //strcpy(ans,s);                for(j=0;j<len;j++)                    ans[j]=s[j];                ans[j]='\0';                continue;            }            j=0;            while(s[j]!='\0')            {//puts(s);                if(ans[j]=='0'){                        j++;                    continue;                }                if(s[j]=='?'){                    j++;                    continue;                }                if(s[j]>='a'&&s[j]<='z')                {                    if(ans[j]=='?')                    ans[j]=s[j];///此处由于搞错,WR,,,,,                    else if(ans[j]!=s[j]&&ans[j]!='?')                        ans[j]='0';                    j++;                }            }        }        for(i=0;i<len;i++)            if(ans[i]=='0')            printf("?");            else if(ans[i]=='?')                printf("x");            else printf("%c",ans[i]);            printf("\n");    }    return 0;}
D:

#include <iostream>#include <cstring>#include <cstdio>#include <cmath>#include <algorithm>#include <map>#include <queue>#include <set>#include <vector>#include <stack>using namespace std;const int M=3*10000+5;vector<int>vt[M];int vis[M],order[M];int n,m,c;void dfs(int u){    if(vis[u])        return ;    vis[u]=1;    for(vector<int>::iterator it=vt[u].begin();it!=vt[u].end();++it)    {        int v=*it;        if(!vis[v])            dfs(v);    }    order[c++]=u;}int main(){    int i,j,k;    int a,b;    while(~scanf("%d%d",&n,&m))    {        for(i=1;i<=n;i++)            vt[i].clear();        for(i=0;i<m;i++)        {            scanf("%d%d",&a,&b);            vt[a].push_back(b);        }        memset(vis,0,sizeof(vis));        c=0;        for(i=1;i<=n;i++)        {            if(!vis[i])            {                dfs(i);            }        }        printf("%d",order[0]);        for(i=1;i<c;i++)        printf(" %d",order[i]);        printf("\n");    }    return 0;}

E:
#include <iostream>#include <cstring>#include <cstdio>#include <cmath>#include <algorithm>#include <map>#include <queue>#include <set>#include <vector>#include <stack>using namespace std;const int M=1000005;char s[M];int isletter(int i){    if((s[i]>='a'&&s[i]<='z')||(s[i]>='A'&&s[i]<='Z'))        return 1;    return 0;}int main(){    __int64 len,i,j,k,l,sum;    while(~scanf("%s",s))    {        sum=0;        len=strlen(s);        for(i=0;i<len;i++)        {            if(s[i]=='@')            {                l=0;                for(j=i-1;j>=0;j--)                {                    if(s[j]=='@'||s[j]=='.')                        break;                    if(isletter(j))                        l++;///开始时字母                }                for(j=i+1;j<len;j++)                {                    if(s[j]=='@'||s[j]=='_')                        break;///@ --.之间是数字和字母                    if(s[j]=='.')                    {                        if(j==i+1)///@.之间没有字母,无意义                            break;                        for(k=j+1;k<len;k++)                        {                            if(!isletter(k))///.后必须是字母                                break;                        }                        sum+=(k-j-1)*l;                        //cout<<l<<" "<<k-j-1<<endl;                        i=j;                        break;                    }                }            }        }        cout<<sum<<endl;        //printf("%I64d\n",sum);    }    return 0;}



0 0
原创粉丝点击