1023. Have Fun with Numbers (20)
Notice that the number 123456789 is a 9-digit number consisting exactly the numbers from 1 to 9, with no duplication. Double it we will obtain 246913578, which happens to be another 9-digit number consisting exactly the numbers from 1 to 9, only in a different permutation. Check to see the result if we double it again!
Now you are suppose to check if there are more numbers with this property. That is, double a given number with k digits, you are to tell if the resulting number consists of only a permutation of the digits in the original number.
Input Specification:
Each input file contains one test case. Each case contains one positive integer with no more than 20 digits.
Output Specification:
For each test case, first print in a line "Yes" if doubling the input number gives a number that consists of only a permutation of the digits in the original number, or "No" if not. Then in the next line, print the doubled number.
Sample Input:1234567899Sample Output:
Yes 2469135798
简单的模拟#include<cstdio> #include<string> #include<cstring> #include<vector> #include<iostream> #include<queue> #include<map> #include<algorithm> using namespace std; typedef long long LL; const int INF = 0x7FFFFFFF; const int maxn = 1e5 + 10; int ch[maxn], f[maxn], flag; char s[maxn]; int main() { scanf("%s", s); for (int i = strlen(s) - 1, j = 0; i >= 0; i--) { ch[j++] = s[i] - '0'; f[ch[j - 1]]++; } for (int i = 0, j = 0; s[i]; i++) { ch[i] = ch[i] * 2 + j; j = ch[i] / 10; ch[i] %= 10; if (--f[ch[i]] < 0) flag = 1; if (!s[i + 1] && j) { flag = 1; ch[i + 1] = j; } } if (!flag) printf("Yes\n"); else printf("No\n"); if (ch[strlen(s)]) printf("%d", ch[strlen(s)]); for (int i = strlen(s) - 1; i >= 0; i--) printf("%d", ch[i]); return 0; }