标签:style blog http color os io for 数据
题意:给a, b,c 给一个公式,s(x)为x的各个位上的数字和,求有多少个x.
分析:直接枚举x肯定超时,会发现s(x)范围只有只有1-81,所以枚举一下就行。
在做题的时候,用了pow()错了3次,很奇怪的是比完赛以后,我看cf的第一组数据竟然是错的,但是
不用pow()提交,第一组数据就是对的,不知道为什么,反正以后不太敢用pow了,还是手写吧。
昨天在b题耽误了好多时间,先是提交错第一组,然后又被人cha了。注意在x在1-10^9之间。
1 #include <iostream> 2 #include <cstdio> 3 #include <vector> 4 #include <cmath> 5 #include <cstring> 6 #include <cstdlib> 7 #include <algorithm> 8 #define LL __int64 9 const int maxn = 1000+10; 10 using namespace std; 11 LL y[maxn]; 12 int check(LL x) 13 { 14 int sum = 0; 15 while(x) 16 { 17 sum += x%10; 18 x /= 10; 19 } 20 return sum; 21 } 22 LL pow_m(int a, int b) 23 { 24 LL ret = 1; 25 for(int i = 1; i <= b; i++) 26 ret *= a; 27 return ret; 28 } 29 int main() 30 { 31 LL a, b, c, i; 32 int cnt; 33 LL tmp; 34 while(~scanf("%I64d%I64d%I64d", &a, &b, &c)) 35 { 36 cnt = 0; 37 memset(y, 0, sizeof(y)); 38 for(i = 1; i <= 81; i++) 39 { 40 //tmp = (LL)pow(i, a); //用这个我的程序跑的数据对,但是测试数据不对 41 tmp = pow_m(i, a); 42 tmp = (LL)tmp*b + (LL)c; 43 if(check(tmp)==i) 44 { 45 if(tmp > 0 && tmp < 1000000000) 46 y[cnt++] = tmp; 47 } 48 } 49 sort(y, y+cnt); 50 printf("%d\n", cnt); 51 for(i = 0; i < cnt; i++) 52 { 53 if(i==cnt-1) 54 printf("%I64d\n", y[i]); 55 else 56 printf("%I64d ", y[i]); 57 } 58 } 59 return 0; 60 }
Codeforces Round #262 (Div. 2),布布扣,bubuko.com
Codeforces Round #262 (Div. 2)
标签:style blog http color os io for 数据
原文地址:http://www.cnblogs.com/bfshm/p/3926379.html