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金牌就稳了! 我骗你的!

全部评论

相关推荐

工作30年还房贷:比赛加学历就已经够了。你要挑点毛病的话,项目写的不行,没有突出深度,你可能做了很多深度工作,但给别人的感觉都是做的很简单的工作。
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务