码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces Round #653 (Div. 3)D. Zero Remainder Array

时间:2020-07-04 18:52:58      阅读:76      评论:0      收藏:0      [点我收藏+]

标签:while   不同的   type   color   strong   else   nbsp   假设   problem   

地址:http://codeforces.com/enter?back=%2Fcontest%2F1374%2Fproblem%2FD

题意:

n个数,k

x初始为0,

操作1:+ai,x++

操作2:x++

问使得所有数均能整除k的最小操作数。每个数只能被加一次。

解析:

假设有俩数:2  2

k=6

第一个2,+4即可,但是第二个2,需要+10

即为4+k

加的数,%k是有周期性的。

每个数能整除k所需要的最小步数为:md=k-ai%k

最小步数相同,实际上它们就是一类,只是处于不同的周期里。

出现次数最多的md,就是需要循环的次数,比它出现次数小的,在之前的循环里就已经解决。

用map来记录这个最大次数

#include<cstdio>
#include<map>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int maxn=2e5+10;
int main()
{    // 4 0 20
    int t;
    cin>>t;
    while(t--)
    {
        ll n,k;
        cin>>n>>k;
        ll maxx=0;
        map<ll,ll>mp;
        for(int i=1;i<=n;i++)
        {
            ll x;
            cin>>x;
            if(x%k==0)
                continue;
            ll md=k-x%k;
            if(mp.count(md))
            {
                mp[md]+=k;
                maxx=max(maxx,mp[md]);
            }
            else
            {
                mp[md]=md;
                maxx=max(maxx,mp[md]);
            }
        }
        if(maxx==0)
            cout<<"0"<<endl;
        else
        cout<<maxx+1<<endl;
    }
}

 

Codeforces Round #653 (Div. 3)D. Zero Remainder Array

标签:while   不同的   type   color   strong   else   nbsp   假设   problem   

原文地址:https://www.cnblogs.com/liyexin/p/13235841.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!