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