#Div2.C Adding Powers[数学]

Problem - C - Codeforces

能否对一个数组执行任意次操作,使得其变为目标数组。

对于第\(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
}
posted @ 2023-02-08 15:02  liangqianxing  阅读(36)  评论(0)    收藏  举报