C. Raspberries-Codeforces Round 905 (Div. 3)

C. Raspberries

输入n个数,最少给这些数加几次可以让所以数乘积被k整除

题目中给出k的范围2<=k<=5,情况很少,分类讨论。

分析:只有当k=4的时候存在给两个数都+1的情况,其他k都只可以给一个数一直+1直到这个数可以mod k=0;

当k=4时单独考虑:

1.出现ai%k=1的数大于等于2,答案可以ans=min(ans,2)

2.出现ai%k=2的数大于等于2,答案可以ans=0

3.出现(ai%k=1的数量)>=1&&(ai%k=2的数量)>=1,答案可以ans=min((int)1,ans)

cpp 复制代码
#include<iostream>
#include<algorithm>
#include<vector>
#define int long long
using namespace std;
const int INF=0x3f3f3f3f;
signed main()
{
    int T;cin>>T;
    while(T--)
    {
        int n,k;cin>>n>>k;
        int a[n+2];
        int ans=INF;
        int cal=1;
        for(int i=1;i<=n;i++)//选取一个数加到可以整除k
        {
            cin>>a[i];cal*=a[i];
            if(a[i]%k==0){
                ans=0;
            }
            int t=a[i]/k+1;
            ans=min(ans,t*k-a[i]);
        }
        if(k==4)
        {
            int cnt1=0,cnt2=0;
            for(int i=1;i<=n;i++)
            {
                switch (a[i]%4)
                {
                case 1:
                    cnt1++;
                    break;
                case 2:
                    cnt2++;
                    break;
                case 3:
                    break;
                default:
                    ans=0;
                    break;
                }
            }
            if(cnt1>=2) ans=min((int)2,ans);
            if(cnt2>=2) ans=0;
            if(cnt1>=1&&cnt2>=1) ans=min((int)1,ans);
        }
        cout<<ans<<endl;
    }
}
相关推荐
沫璃染墨22 分钟前
从零入门计算机网络系列(十一):HTTP协议进阶——从重定向原理到GET/POST与Fiddler抓包
linux·服务器·开发语言·网络·c++·tcp/ip·html
维克兜率天37 分钟前
【维克】指数调整:哪些股票会被“强制买入“?
人工智能·python·算法
罗西的思考1 小时前
【轻量化复刻大模型】线性注意力交互式演示
人工智能·算法·机器学习
神也畏惧菠萝1 小时前
Day08 Python流程控制从入门到上瘾:if/match/while/for四件套,从B站登录一路打到猜数字游戏
python·算法·数据存储·for·while·if·ifelse
揽星河..2 小时前
【C语言】分支和循环
c语言·c++·算法
Fuyo_11193 小时前
C++ AVL树保姆级详解:从平衡因子到四大旋转机制
java·c++·算法
jktantan4 小时前
每个节点 41 字节:把一棵百万节点树拆进 14 个 typed array
前端·javascript·vue.js·算法·typescript
揽星河..4 小时前
【C语言】猜数字游戏
c语言·算法·游戏
傲世仙尊4 小时前
继承-类设计层次复用切片转换与菱形继承的死结
c++