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()

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

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

 

posted @ 2014-11-07 23:08  ACBingo  阅读(176)  评论(0编辑  收藏  举报