B - Spreadsheets CodeForces - 1B
Posted smallhester
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了B - Spreadsheets CodeForces - 1B相关的知识,希望对你有一定的参考价值。
在一些知名的表格处理系统中(比如:excel表格),我们经常用大写的字母来表示列,例如A表示第1列,B表示第2列,第26列用Z来表示,同时第27列我们用AA来表示,第28列我们用AB来表示,第29列我们用AC来表示,AZ表示第52列,ZZ之后我们就需要用3个字母来表示列了。
行的表示比较简单,我们一般用正整数来表示,比如1就表示第1行,5就表示第5行,行和列一起表示成为类似BC23的情况,这个表示在第23行,第55列。
有时候,我们的系统也会用RXCY的格式来表示,X和Y是整数,分别表示行号和列号。例如:R23C55表示的位置和之前那个例子是一样的。
你的任务是写一个程序,将这些位置在两种不同的表示方法之间转化。
Input
第一行是一个正整数n(1<=n<=10^5), 表示测试数据的数量。
接下来n行,每行一串字符,表示一个位置,输入保证所有的位置都是正确的,没有一个位置的行号或者列号超过10^ 6。
Output
输出n行,每行是对应的位置的转化结果。
Sample Input
2
R23C55
BC23
Sample Output
BC23
R23C55
#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<stack> #include<cstdlib> #include<queue> #include<set> #include<string.h> #include<vector> #include<deque> #include<map> using namespace std; #define INF 0x3f3f3f3f #define eps 1e-10 #define bug printf("*********\n") #define debug(x) cout<<#x"=["<<x<<"]" <<endl typedef long long LL; typedef long long ll; const int MAXN = 1e6 + 5; const int mod = 998244353; bool is(char a) if(‘A‘ <= a && a <= ‘Z‘) return true; return false; int check(char *s) int len = strlen(s); int ans = 0,pos1 = -1,pos2 = -1; for(int i = 0 ;i < len; i++) if(is(s[i]) && s[i] != ‘R‘ && s[i] != ‘C‘) ans++; continue; if(s[i] == ‘R‘) ans ++; pos1 = i; if(s[i] == ‘C‘) ans++; pos2 = i; if(ans == 2 && pos1 != -1 && pos2 != -1 && pos2 - pos1 > 1) return 1; return 2; //将一个数转换为A - Z的进制,比如3 -> C 34 -> AH 123 -> DS void K(int n) if(n>26) K((n-1)/26); printf("%c",(n-1)%26+‘A‘); int main() int n; cin >> n; while(n--) char s[MAXN]; scanf("%s",s); int flag = check(s); //debug(flag); if(flag == 1) int len = strlen(s); int pos1 = -1,pos2 = -1; for(int i = 0 ;i < len; i++) if(s[i] == ‘R‘) pos1 = i; if(s[i] == ‘C‘) pos2 = i; int p1 = 0,p2 = 0; for(int i = pos1 + 1; i < pos2; i++) p1 *= 10; p1 += (s[i] - ‘0‘); for(int i = pos2 + 1; i < len; i++) p2 *= 10; p2 += (s[i] - ‘0‘); char ch = ‘A‘; K(p2); printf("%d\n",p1); else int p1 = 0,p2 = 0; int len = strlen(s); int i; for(i = 0; i < len; i++) if(is(s[i])) p1 *= 26; p1 += s[i] - ‘A‘ + 1; else break; for(i ; i < len ; i++) p2 *= 10; p2 += s[i] - ‘0‘; printf("R%dC%d\n",p2,p1);
以上是关于B - Spreadsheets CodeForces - 1B的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Beta Round #1 B. Spreadsheets 题解
使用Excel或Google SpreadSheets公式为单元格中的每个单词添加加号