首页 > 代码库 > Codeforces Round #262 (Div. 2)
Codeforces Round #262 (Div. 2)
题目链接
B Little Dima and Equation
题意:给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 else56 printf("%I64d ", y[i]);57 }58 }59 return 0;60 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。