Educational Codeforces Round 83 (Rated for Div. 2) C. Adding Powers

Onida ·
更新时间:2024-09-20
· 740 次阅读

传送门 题意:

在这里插入图片描述

思路:

每步可加kik^iki,也可以跳过不加,看能否构成给定数组
数组中的0是不需要处理的
我们直接一步一步把数分解即可,看要用到的i是否够用,每个i只能用一次
做的过程:
假设k=9,有一个数是b[i]=93+94+959^3+9^4+9^593+94+95

int l=0;//要用的幂次 while(1){ while(b[i]%k==0){ b[i]/=k; l++; }// l=3 b[i]=1+9+9^2 if(p[l]!=1){ flag=0; break; } p[l]=0; b[i]--;//b[i]=9+9^2,然后继续循环处理b[i]即可 if(b[i]%k!=0){ flag=0; break; } if(b[i]==0)break; } 代码: #include #include #include #include #include #include #include #include #include #include #define pb push_back #define lb lower_bound #define ub upper_bound #define rep(i,a,b) for(int i=a;i=b;i--) typedef long long ll; using namespace std; const int MAXN=4e4+50; const int inf=0x3f3f3f3f; const int M=5000*4; ll a[50],b[50]; int main() { std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0); int t,n,k; cin>>t; while(t--){ mapp; int cnt=0; cin>>n>>k; int x=0; rep(i,1,n){ cin>>a[i]; if(a[i]!=0){ if(a[i]==1)x++; else b[++cnt]=a[i]; } } if(x>=2){ cout<<"NO"<<endl; continue; } int flag=1; for(int i=0;i=1;i--)cout<<b[i]<=1;i--){ int l=0;//要用的幂次 while(1){ while(b[i]%k==0){ b[i]/=k; l++; } if(p[l]!=1){ flag=0; break; } p[l]=0; b[i]--; if(b[i]%k!=0){ flag=0; break; } if(b[i]==0)break; } if(flag==0)break; } if(flag==1)cout<<"YES"<<endl; else cout<<"NO"<<endl; } return 0; } /* 5 3 2 0 1 3 */
作者:_Alexander



CodeForces rated round div

需要 登录 后方可回复, 如果你还没有账号请 注册新账号