CF1883C Raspberries

思路

最开始晃眼一看,感觉很难,仔细一读题,哦,原来 k[2,5] 啊。

首先如果 k 是质数,也就是 k 不等于 4 的情况,必须要有一个数是 k 的倍数,那么计算每个数需要的操作数,取最小即可。

如果 k 不是质数,也就是 k 等于 4 的情况,要么是一个数是 4 的倍数,要么有两个数是 2 的倍数,那么取最小即可。

AC code

#include<bits/stdc++.h>
using namespace std;
int T,n,m,a,ans;
int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m),ans=m+2;
if(m==4)//当时想复杂了,所以写得又臭又长
{
ans=2;
if(n==1)
{
scanf("%d",&a);
printf("%d\n",(a%4==0)?0:(m-a%m));
}
else
{
int num=4;
for(int i=1;i<=n;++i)
{
scanf("%d",&a),ans-=(a%4==0)?2:(a%2==0)?1:0;
if(a%4==3) num=1;
if(a%4==2) num=min(num,2);
}
printf("%d\n",min(num,max(ans,0)));
}
continue;
}
for(int i=1;i<=n;++i) scanf("%d",&a),ans=min(ans,(a%m==0)?0:(m-a%m));
printf("%d\n",ans);
}
return 0;
}
posted @   One_JuRuo  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示