这一场比赛也是我第一次参加CF,有点欣喜。其实这场比赛前三题没有那么难,A,B我基本上上很快做出来了,看到C题就卡住了(倒不是我的思路不对,看到题最后的提示,很容易想到K进制),只是我的代码风格真的有待改善,直到今天改了改代码的结构才终于AC。(难受!!!)
这是这道题的链接:https://codeforces.com/contest/1312/problem/C
代码如下:
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
//其实这道题就是将给出的所有数进行K进制表示,求每位出现的次数总和,如果出现次数大于等于2,则不符合题意,输出YES,否则NO
ll a[50];
int b[100];
int main(){
int t;
cin>>t;
int n,k;
while(t--){
memset(b,0,sizeof(b));
cin>>n>>k;
for (int i=1;i<=n;i++){
cin>>a[i];
}
int f=0;
for (int i=1;i<=n;i++){
if(f==1){
break;
}
else{
if(a[i]==0){ //a[i]为0直接忽略
continue;
}
else{
ll c=a[i];
ll p=1;
int num=0;
while(c!=0){
if(c%k<=1){
b[num++]+=c%k;
}
else{
f=1;
break;
}
if(b[num-1]>=2){
f=1;
break;
}
c/=k;
}
}
}
}
if(f==0){
cout<<"YES\n";
}
else{
cout<<"NO\n";
}
}
return 0;
}
Educational Codeforces 83-C
原文:https://www.cnblogs.com/youngbai/p/12496112.html