CodeForces 1312C Adding Powers
题目链接
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");
}
}
思维 文章被收录于专栏
思维题都会了,ACM金牌就稳了! 我骗你的!

