http://acm.timus.ru/problem.aspx?space=1&num=1289
题意
定义一个数具有性质P,当且仅当前一半的数字根=后一半的数字根。
数字根定义为:重复做数码求和,直到得到0~9。
问k位P性质数有多少?
题解
由数字根定义,其操作过后mod 9不变。而若原数>0,则操作过后数也一定>0,则:
1. 最后得到0当且仅当原数为0,即mod 9 = 0的k位数仅有一个
2. 除了0以外,由对称性,可知mod 9 = x的k位数有
(102−1)9
,
3.
res=9×((102−1)9)2+12=99...9×11...1+1=1...108...89
即
res=1..108..890
code
#include <algorithm>
#include <bitset>
#include <cassert>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <deque>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <string>
#include <vector>
typedef long long LL;
const int maxn = 100000;
int n;
void solve() {
scanf("%d", &n);
if (n == 2) printf("10\n");
else {
for (int i = 1; i <= n/2-1; ++ i) printf("1");
printf("0");
for (int i = 1; i <= n/2-2; ++ i) printf("9");
puts("90");
}
}
int main() {
// freopen("G.in", "r", stdin);
solve();
// for(;;);
return 0;
}