Codeforces Beta Round #1 B Spreadsheet
2015-08-18 23:42
197 查看
http://codeforces.com/contest/1/problem/B
分析:
这题是告诉你一种编码的方式,
有两种码,需要做的就是把一种形式的码转换成另一种形式的码。
首先需要判断是把哪种码转化成哪种码,再分别找规律进行处理就可以了。
/* 给点可以测出坑的数据 input: 4 ZL98 AZ23 R98C688 R23C52 output: R98C688 R23C52 ZL98 AZ23 */ #include <iostream> #include <sstream> #include <iomanip> #include <vector> #include <deque> #include <list> #include <set> #include <map> #include <stack> #include <queue> #include <bitset> #include <string> #include <numeric> #include <algorithm> #include <functional> #include <iterator> #include <cstdio> #include <cstring> #include <cmath> #include <cstdlib> #include <cctype> #include <complex> #include <ctime> typedef long long LL; const double pi = acos(-1.0); const long long mod = 1e9 + 7; using namespace std; char s[100005]; int main() { //freopen("int.txt","r",stdin); //freopen("out.txt","w",stdout); int T; scanf("%d",&T); while(T--) { scanf("%s",s); int len = strlen(s); //printf("%s\n",s); int ok = 0; for(int i = 0;i < len;i++) { if(s[i] >= '0' && s[i] <= '9' && s[i + 1] >= 'A' && s[i + 1] <= 'Z') { ok = 1; break; } } //printf("%d\n",ok); if(ok) { int num1 = 0,num2 = 0; int i = 1; while(s[i] <= '9' && s[i] >= '0') { num1 = 10 * num1 + s[i] - '0'; i++; //printf("%d\n",num1); } i++; while(s[i] <= '9' && s[i] >= '0') { num2 = 10 * num2 + s[i] - '0'; i++; //printf("%d\n",num2); } int t = 0; int a[1000]; while(num2 != 0) { a[t] = num2 % 26; num2 /= 26; if(a[t] == 0) num2--; t++; } for(int i = 0;i < t;i++) { if(a[i] != 0) a[i] += 'A' - 1; else a[i] = 'Z'; } for(int i = t - 1;i >= 0;i--) printf("%c",a[i]); printf("%d\n",num1); } else { int num1 = 0,num2 = 0; int j = 0; while(s[j] <= 'Z' && s[j] >= 'A') { num1 = 26 * num1 + s[j] - 'A' + 1; j++; } //printf("%d\n",num1); while(s[j] <= '9' && s[j] >= '0') { num2 = 10 * num2 + s[j] - '0'; j++; } //printf("%d\n",num2); printf("R%dC%d\n",num2,num1); } } return 0; }
还有另一份差不多的也上传上来
#include <iostream> #include <sstream> #include <iomanip> #include <vector> #include <deque> #include <list> #include <set> #include <map> #include <stack> #include <queue> #include <bitset> #include <string> #include <numeric> #include <algorithm> #include <functional> #include <iterator> #include <cstdio> #include <cstring> #include <cmath> #include <cstdlib> #include <cctype> #include <complex> #include <ctime> typedef long long LL; const double pi = acos(-1.0); const long long mod = 1e9 + 7; using namespace std; char s[1000005]; char buf[] = {"aABCDEFGHIJKLMNOPQRSTUVWXYZ"}; int main() { //freopen("int.txt","r",stdin); //freopen("out.txt","w",stdout); int N; scanf("%d",&N); for(int i = 1;i <= N;i++) { scanf("%s",s); int len = strlen(s); s[len] = '0'; int ok = 0; for(int i = 0;i < len;i++) { if(s[i] >= '0' && s[i] <= '9' && s[i + 1] <= 'Z' && s[i + 1] >= 'A') { ok = 1; break; } } if(ok) { int i = 1; int num1 = 0; while(s[i] <= '9' && s[i] >= '0') { num1 = num1 * 10 + s[i] - '0'; i++; } i++; int num2 = 0; for(i;i < len;i++) num2 = num2 * 10 + s[i] - '0'; //printf("%d %d\n",num1,num2); int temp[10000], cnt = 0; while(num2) { if(num2 % 26 == 0) { temp[cnt++] = 26; num2 = num2 / 26 - 1; } else { temp[cnt++] = num2 % 26; num2 = num2 / 26; } } for(int i = cnt - 1; i >= 0; i--) printf("%c", buf[temp[i]]); printf("%d\n",num1); } else { int i = 0; int num1 = 0,num2 = 0; while(s[i] <= 'Z' && s[i] >= 'A') { num1 = num1 * 26 + (s[i] - 'A' + 1); i++; } for(i;i < len;i++) num2 = num2 * 10 + (s[i] - '0'); printf("R%dC%d\n",num2,num1); } } return 0; }
相关文章推荐
- 【转载】在Ubuntu下配置舒服的Python开发环境
- hdu 5400 Arithmetic Sequence
- 100条超实用微信营销技巧:公众号、朋友圈和微信营销
- TI-RTOS Sys-Bios操作系统无法获取Hwi,Swi的Name问题
- 小小菜之Cocos2d-x游戏开发旅程——常用Action(1)
- 在非UI线程中更改UI(Delphi使用隐藏窗口来处理,QT使用信号槽)
- 黄聪:wordpress工作原理
- 解密:wp-includes/load.php
- 剑指Offer面试题:4.从尾到头打印链表
- 输入流转换成字符串
- Linux 线程同步的三种方法
- 黄聪:WordPress根目录(Root)
- jzoi#13t1
- Java前述
- 保存图片到SD卡
- hdu4277搜索
- Git 使用规范流程
- Linux知识点
- gdb之线程
- 保存图片到SD卡