Codeforces 1B. Spreadsheets

就是熟悉一下分类讨论和string转int,唯一的难度在于关于 'Z' 的讨论,发现其实进制还是26进制,不过这里没有0反而有26,那就每次 C%26==0 时手动分离一个 'Z' 出来就好了。

注意一下行和列别搞反,cin.tie(0) 对cout的影响(未解决),substr方法的两个参数分别是begin和length即可。

#include<bits/stdc++.h>
using namespace std;

#define ll long long
int n;
string s;

int type1(int FN){
    //BC23

    string s1,s2;
    s1=s.substr(0,FN);
    s2=s.substr(FN,s.length()-FN);

    ll C=0;

    int l1=FN;
    for(int i=0;i<FN;i++){
        C*=1LL*26;
        C+=s[i]-'A'+1;
    }

    cout<<"R"<<s2<<"C"<<C<<"\n";
    return 0;
}

int type2(int SA){
    //R23C55

    string s1,s2;
    s1=s.substr(1,SA-1);
    s2=s.substr(SA+1,s.length()-SA+1);


    stringstream sin2(s2);

    ll C;

    sin2>>C;
    string res;
    while(C){
        if(C%26==0){
            res='Z'+res;
            C/=26;
            C--;
        }
        else{
            res=(char)('A'-1+C%26)+res;
            C/=26;
        }
    }

    cout<<res<<s1<<"\n";
    return 0;
}


int findFirstNum(){
    for(int i=1;;i++){
        if(s[i]>='0'&&s[i]<='9')
            return i;
    }
}


int findSecondAlpha(int FN){
    int l=s.length();
    for(int i=FN+1;i<l;i++){
        if(s[i]>='A'&&s[i]<='Z')
            return i;
    }
    return -1;
}


int solution(){
    cin>>s;

    int FN=findFirstNum();
    int SA=findSecondAlpha(FN);

    if(SA==-1)
        return type1(FN);
    else
        return type2(SA);

}

int main() {

    cin.sync_with_stdio(false);
    //cin.tie(nullptr);

    while(cin>>n){
        while(n--)
            int res=solution();
    }
	return 0;

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值