首页 > 代码库 > 11-05-sdust-个人赛赛后随想

11-05-sdust-个人赛赛后随想

第二次打个人赛

这次居然打秃了,被A题卡的体无完肤.....结果之后转D题心里挂着A题...D题也被卡。

然后第二天不甘心,翘课来机房敲昨天的题,结果两题完全重新敲,都是10分钟左右敲完代码,A题1掉

然后D题还真有点说头...用了一上午的时间去找到哪错了,领悟到了不少东西

#include <iostream>#include <string>#include <cstring>#include <cstdio>using namespace std;int check(string s){    for (int i=2;i<s.size();i++){        if (s[i]==C) return 1;    }    return 0;}int work1(string s){    int r,c;    sscanf(s.c_str(),"R%dC%d",&r,&c);    int a[1000];    memset(a,0,sizeof(a));    int top=0;    while (c){        a[top++]=c%26;        c/=26;        if (a[top-1]==0) a[top-1]=26,c--;    }    for (int i=top-1;i>=0;i--)        putchar(a[i]+A-1);    cout<<r<<endl;}int mypow(int t){    int ans=1;    for (int i=1;i<=t;i++)        ans*=26;    return ans;}int work2(string s){    int a[1000];    memset(a,0,sizeof(a));    int top=0;    while (s[top]>=A&&s[top]<=Z)  a[top]=s[top],top++;    int r,c=0;    int t=0;    for (int i=top-1;i>=0;i--)        c+=(a[i]-A+1)*mypow(t++);    char st[1000]={\0};    s.copy(st,s.size()-top,top);    //st[s.size()]=‘\0‘;    sscanf(st,"%d",&r);    cout<<"R"<<r<<"C"<<c<<endl;}int main(){    int testcase;    cin>>testcase;    while (testcase--){        string s;        cin>>s;        if (s[0]==R&&s[1]>=0&&s[1]<=9&&check(s)) work1(s);            else work2(s);    }    }
View Code

 

首先现学现卖学会了怎么用sscanf()

然后即使是字符数组,也一定要记得初始化

最后也是最重要的一点,思路不清晰千万千万不要下手,否则敲到一半才发现是错的

 

11-05-sdust-个人赛赛后随想