本文主要是介绍codevs 3943 数学奇才琪露诺,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目
对于有趣的数x,x的数位和 k ∗ p ^k*p k∗p+(加号重点) q = x 。 q=x。 q=x。,求在一个区间里有趣的数的个数。
分析
枚举数位和,我的方法是用C++自带的堆升序排列。
代码
#include <cstdio>
#include <queue>
using namespace std;
typedef long long ll;
ll k,p,q,l,r,tot;
priority_queue<ll>heap;
ll ksm(ll x,ll y){ll ans=1;while (y){if (y&1) ans*=x;x*=x; y>>=1;}return ans;
}
int main(){scanf("%lld%lld%lld%lld%lld",&k,&p,&q,&l,&r);ll r1=r; while (r1){r1/=10;tot++;}for (int i=0;i<=tot*9;i++){ll ans=ksm(i,k)*p+q,n=0; ll m=ans;while (ans){n+=ans%10; ans/=10;}if (n==i&&m>=l&&m<=r) heap.push(-m);}int len=heap.size(); printf("%d",len); for (int i=1;i<=len;i++) printf("%c%lld",(i==1)?'\n':' ',-heap.top()),heap.pop();return 0;
}
这篇关于codevs 3943 数学奇才琪露诺的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!