Codeforces解题报告
——序号1
题目1A: Theatre Square
题意:
在一个n*m的矩形块里面用,a*a 的正方形瓷砖铺满它,问最少个数?
只需要计算边界上,最多需要的数量,然后相乘就好!
代码:
int main() { #ifdef LOCAL //freopen("in.txt", "r", stdin); //freopen("out.txt", "w", stdout); #endif // LOCAL LL n, m ,a; while(cin >> n >> m >> a) { LL width = n / a + ((n % a == 0) ? 0 : 1); LL height = m / a + ((m % a == 0) ? 0 : 1); cout << width * height << endl; } return 0; }
题目1B:Spreadsheets
题意:
在两种坐标中进行转换,一种是R*C*类型,一种是Excel表格的形式
已知在RXCY和AA11这两个坐标形式中,R型坐标Y是不用转换的直接就是Excel表格中的行数。
把一个数字转换为大写字母的基本方式是:
反复让sum和26求余数,如果余数不为0,则对应的字母为'A' - 1 + 余数,否则直接等于’Z'
然后sum = sum / 26; 但是如果余数为零,sum除以26以后,还需要减一 这是关键!!!
最后将所得字符反向输出即可!
比如28 -> 28 % 26 = 2 --> B
28 / 26 = 1
1 % 26 = 1 --> A
输出结果为AB
把大写字母转换为数字的方法为:
参考二进制转换十进制 x1 * 2 ^ k + ...... + xn * 2 ^ 0;
即x * 26 ^ k + .......
其中x为字母的下表,A为1,k表示字母所在的位置,从0计数
比如 AB 就是 1*26^1 + 2 = 28
代码:
const int maxn = 100; char cmd[maxn]; int Pow[] = { 1, 26, 676, 17576, 456976, 11881376 }; int pow2[] = { 1, 10, 100, 1000, 10000, 100000, 1000000 }; void fun1() { int k = 0; int sum = 0; int pos = 0; int len = strlen(cmd); for (int i = len - 1; i >= 0; --i) if (isdigit(cmd[i])) sum += (cmd[i] - '0') * pow2[k++]; else break; char tmp[maxn]; int s = 0; while (sum) { if (sum % 26 == 0) { tmp[s++] = 'Z'; sum = sum / 26 - 1; } else { tmp[s++] = 'A' - 1 + sum % 26; sum /= 26; } } for (int i = s - 1; i >= 0; --i) printf("%c", tmp[i]); for (int i = 1; i < len; ++i) if (isdigit(cmd[i])) printf("%c", cmd[i]); else break; printf("\n"); } void fun2() { int len = strlen(cmd); int sum = 0; int pos = 0; printf("R"); for (int i = 0; i < len; ++i) if (isdigit(cmd[i])) printf("%c", cmd[i]); printf("C"); int k = 0; for (int i = len - 1; i >= 0; --i) if (isalpha(cmd[i])) sum += (cmd[i] - 'A' + 1) * Pow[k++]; printf("%d\n", sum); } int main() { #ifdef LOCAL // freopen("in.txt", "r", stdin); // freopen("out.txt", "w", stdout); #endif // LOCAL int n; scanf("%d", &n); while (n--) { scanf("%s", cmd); int len = strlen(cmd); bool flag = false; for (int i = 1; i < len; ++i) if (cmd[i] == 'C') flag = true; if (len >= 4 && cmd[0] == 'R' && isdigit(cmd[1]) && flag) fun1(); else fun2(); } return 0; }
题目1C:Ancient Berland Circus
题意:
代码: