結果
問題 | No.491 10^9+1と回文 |
ユーザー |
![]() |
提出日時 | 2017-03-12 22:06:24 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,684 bytes |
コンパイル時間 | 460 ms |
コンパイル使用メモリ | 59,216 KB |
実行使用メモリ | 6,948 KB |
最終ジャッジ日時 | 2024-06-30 00:34:48 |
合計ジャッジ時間 | 3,051 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 42 WA * 61 |
ソースコード
//#include "stdafx.h"#include <iostream>#include <vector>using namespace std;#define int long longint pow(int x, int y) {int p = 1;for (int i = 0; i < y; i++){p *= x;}return p;}#define KEY 1000000001int digit(int n){for (int i = 1; i < 18; i++){if (pow(10,i) > n) {return i;}}return 18;}int rightCount(int digit) {int n = digit - 10;int sum = 0;for (int i = 1; i <= n; i++){sum += pow(9, i % 2);}return sum;}void genkeys(int keys[], int pd) {//cout << pd << endl;if (pd == 1) { keys[0] = 1; return; }else if (pd == 2) { keys[0] = 11; keys[1] = 1; return; }for (int i = 0; i < pd / 2; i++){keys[i] = pow(10, pd - 1 - i) + pow(10, i);}if (pd % 2 == 1) keys[pd / 2] = pow(10, pd / 2);}int genNum(int keys[], int keyCount[], int pd) {int num = 0;for (int i = 0; i < pd / 2; i++){num += keys[i] * keyCount[i];}if (pd % 2 == 1) num += keys[pd / 2] * keyCount[pd / 2];return num * KEY;}int check(int n) {int d = digit(n);//cout << d << endl;if (d < 10) return 0;int right = rightCount(d);//cout << right << endl;int pd = d - 9;int keys[5];genkeys(keys, pd);int keyCount[5] = { 1, 0, 0 ,0 ,0 };int ex = 0;int keysCount = (pd / 2) + (pd % 2 == 0 ? 0 : 1);while (true) {if (n <= genNum(keys, keyCount, pd)) {break;}//cout << genNum(keys, keyCount, pd) << endl;ex++;keyCount[keysCount - 1]++;for (int i = keysCount - 1; 0 < i; i--) {if (keyCount[i] == 10){keyCount[i] = 0;keyCount[i - 1]++;}else {break;}}}return (ex + right);}signed main() {int t;cin >> t;cout << check(t) << endl;return 0;}