题目大意就是:

设f(x)为x各个位数字之和,求x属于[0,k]且b * f(x)^a + c = x的x个数并升序输出。

(a<=5  .  b,c,<=10^4  .   k<=10^9)

可以发现f(x)的可能取值(在本题)最多只有81种,并且f(x)确定了之后等号左边就确定了。于是我们可以大力枚举f(x)是多少,解出x之后再看看f(x)是不是等于枚举的值。

#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<cstdio>
#include<vector>
#define ll long long
using namespace std;
const int maxn=233333;
ll T,a,b,c,k,ans,sol[maxn]; inline ll get(ll x){
if(x<0) return -19260817;
ll an=0;
for(;x;an+=x%10,x/=10);
return an;
} inline ll ksm(ll x,ll y){
ll an=1;
for(;y;y>>=1,x=x*x) if(y&1) an=an*x;
return an;
} inline void solve(){
ans=0,scanf("%lld%lld%lld%lld",&a,&b,&c,&k);
for(int i=0;i<=81;i++){
ll now=ksm(i,a)*b+c;
if(get(now)==i&&now<=k) sol[++ans]=now;
} if(!ans){
puts("0");
puts("-1");
return;
} printf("%lld\n",ans);
sort(sol+1,sol+ans+1);
for(int i=1;i<=ans;i++) printf("%lld ",sol[i]);
puts("");
} int main(){
freopen("safe.in","r",stdin);
freopen("safe.out","w",stdout); scanf("%lld",&T);
while(T--) solve();
return 0;
}

  

最新文章

  1. Cycles渲染研究测试效果图
  2. stm32之NVIC
  3. 1-2+3-4+5-6+7......+n的几种实现
  4. div+css之清除浮动
  5. Java内存区域分配基恩内存溢出异常
  6. 基于Struts2框架实现登录案例
  7. springMVC+Hibernate常用的配置文件
  8. 十三、mysql 分区之 RANGE &amp;&amp; LIST
  9. C++默认参数不能是一个引用
  10. websocket-heartbeat-js心跳检测库正式发布
  11. Colored Sticks POJ - 2513 并查集+欧拉通路+字典树hash
  12. 斯坦福大学公开课机器学习: machine learning system design | prioritizing what to work on : spam classification example(设计复杂机器学习系统的主要问题及构建复杂的机器学习系统的建议)
  13. 关于Cocos的内存管理机制引发一些异常的解决方案
  14. 怎么看SQL表里某列是否是自增列
  15. 在浏览器端用es6,babel+browserify打包
  16. python 停止线程
  17. 789A Anastasia and pebbles
  18. Express浅谈
  19. linux内核分析第二次实验
  20. django日志使用TimeRotateFileHandler

热门文章

  1. Javaweb学习笔记3—Serverlet
  2. sqlite3:深入理解sqlite3_stmt 机制
  3. linux下C的建立、编译和运行 gcc (附上Windows下visual c++的用法)
  4. JavaScript轮播图
  5. C++内联函数的使用
  6. 5.1 qbxt 一测 T2
  7. MySQL数据库常见面试题
  8. js|jquery常用代码
  9. 编写一个微信小程序
  10. Python-集合数据类型内置方法