C RaspberriesCodeforces Round 905 Div 3
墨初 知识笔记 88阅读
C. Raspberries
输入n个数最少给这些数加几次可以让所以数乘积被k整除
题目中给出k的范围2<k<5,情况很少分类讨论。
分析只有当k4的时候存在给两个数都1的情况其他k都只可以给一个数一直1直到这个数可以mod k0;
当k4时单独考虑:
1.出现a[i]%k1的数大于等于2答案可以ansmin(ans,2)
2.出现a[i]%k2的数大于等于2答案可以ans0
3.出现(a[i]%k1的数量)>1&&(a[i]%k2的数量)>1答案可以ansmin((int)1,ans)
#include<iostream>#include<algorithm>#include<vector>#define int long longusing namespace std;const int INF0x3f3f3f3f;signed main(){ int T;cin>>T; while(T--) { int n,k;cin>>n>>k; int a[n2]; int ansINF; int cal1; for(int i1;i<n;i)//选取一个数加到可以整除k { cin>>a[i];cal*a[i]; if(a[i]%k0){ ans0; } int ta[i]/k1; ansmin(ans,t*k-a[i]); } if(k4) { int cnt10,cnt20; for(int i1;i<n;i) { switch (a[i]%4) { case 1: cnt1; break; case 2: cnt2; break; case 3: break; default: ans0; break; } } if(cnt1>2) ansmin((int)2,ans); if(cnt2>2) ans0; if(cnt1>1&&cnt2>1) ansmin((int)1,ans); } cout<<ans<<endl; }}

标签: