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); } }
首先现学现卖学会了怎么用sscanf()
然后即使是字符数组,也一定要记得初始化
最后也是最重要的一点,思路不清晰千万千万不要下手,否则敲到一半才发现是错的