結果
問題 | No.327 アルファベット列 |
ユーザー |
|
提出日時 | 2016-03-02 01:01:29 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 1,684 bytes |
コンパイル時間 | 524 ms |
コンパイル使用メモリ | 56,412 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-10-06 23:04:25 |
合計ジャッジ時間 | 1,612 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 50 |
ソースコード
#include <iostream>using namespace std;void SubtractOneFromDigit(int* data, int digit, int maxDigits);long long Pow(long long num, int multiplier);int main() {const int ALPHABET_COUNT = 26;long long n;cin >> n;int numberOfDigits = 1;while (true) {if (Pow(ALPHABET_COUNT, numberOfDigits) <= n)numberOfDigits++;elsebreak;}int* data = new int[numberOfDigits];for (int multiplier = numberOfDigits - 1; multiplier > 0; multiplier--) {long long sub = Pow(ALPHABET_COUNT, multiplier);int digitNum = 0;while (n - sub >= 0) {n -= sub;digitNum++;}int digit = multiplier;data[digit] = digitNum;}data[0] = (int)n;int digit = 1;while (digit < numberOfDigits){SubtractOneFromDigit(data, digit, numberOfDigits - 1);digit++;}int maxNumberOfDigitsIndex = 0;for (int i = numberOfDigits - 1; i >= 0; i--) {if (data[i] != -1) {maxNumberOfDigitsIndex = i;break;}}char alphabetTable[ALPHABET_COUNT];for (int i = 0; i < ALPHABET_COUNT; i++) {alphabetTable[i] = 'A' + i;}string output;for (int i = maxNumberOfDigitsIndex; i >= 0; i--) {int num = data[i];char alphabet = alphabetTable[num];output.push_back(alphabet);}cout << output.c_str() << endl;return 0;}void SubtractOneFromDigit(int* data, int digit, int maxDigits) {if (data[digit] == 0) {if (digit < maxDigits) {SubtractOneFromDigit(data, digit + 1, maxDigits);data[digit] = 25;}else {data[digit] = -1;}}else {data[digit]--;}}long long Pow(long long num, int multiplier) {long long ret = num;for (int i = 1; i < multiplier; i++) {ret *= num;}return ret;}