题目链接
https://codeforces.com/problemset/problem/1312/C
解题思路
这应该都知道吧:
x除以1个k,再对k取模得到的是权重为k^1的系数,即组成x需要系数个k^1;x除以2个k,对k取模得到的是权重为k^2的系数,即组成x还需要系数个k^2……
累计所有数的需要不同权重的个数,只要存在一个权重的个数大于1,就不满足题意。
AC代码
#include<bits/stdc++.h> #define ll long long using namespace std; const int N=70; int T,n,k,num,f,cnt[N]; ll a[N]; int main() { cin>>T; while(T--) { cin>>n>>k; memset(cnt,0,sizeof cnt); f=0; for(int i=1;i<=n;i++) { cin>>a[i]; ll tmp=a[i]; num=0; while(tmp) { ll mm=tmp%k; if(mm>1)//余数超出1个,直接break了 { f=1; break; } else if(mm==1)//余数为1,统计上,若统计上之后比1大了,也break { if(++cnt[num]>1) { f=1; break; } }//余数为0没影响 tmp/=k;//不断除以k num++;//控制指数 } } if(f) puts("NO"); else puts("YES"); } }