您的位置:首页 > 其它

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: