能否对一个数组执行任意次操作,使得其变为目标数组。
对于第\(i\)次操作,我们可以放弃,或给数组中任意一个元素加上\(k^i\)。
\(n<=30,k<=100\),目标数组元素<=\(10^{16}\)
其实这个题很简单,但是看了很多人的代码都写的好长
这个题的意思说的很明白
我们知道 \(810\)= \(9^2+9^3\) , 可以知道
\(810\)\(\div\)\(9^2\)%\(9\)\(=1\)
\(810\)\(\div\)\(9^3\)%\(9\)\(=1\)
剩下的都同理
介于每个操作用一次,可以开一个map记录一下
如果有重复的就是不成立
那么就可以切掉了
key code
const int N=2e5+10;
int n,k;
int a[N];
void solve(){
//try it again.
cin>>n>>k;
up(1,n)cin>>a[o];
map<int,int>mp;
up(1,n){
int cnt=0;
while(a[o]){
cnt++;
if(a[o]%k>1)NO
if(a[o]%k==1)mp[cnt]++;
a[o]/=k;
if(mp[cnt]>1)NO
}
}
YES
}
标签:Adding,cnt,int,up,数组,810,Powers,Div2
From: https://www.cnblogs.com/liangqianxing/p/17101810.html