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

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

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

 

你可能感兴趣的:(du)