Codeforces Round #653 (Div. 3)D题解

    技术2022-07-10  115

    题意:就是给你N个数,有个x,每次加在N个数中任意一个,然后X++,或者直接X++,x=0开始,问你要多少次后N中所有数字可以%K==0; 题解:首先简单化,把N个数全部%k,一次,这样就好看了,然后我们处理出来的,数字是不是就会有大有小,这个时候我们要从 小的开始处理,为什么,越大得数字是不是越容易接近K,那么N个数字我们可以把他转换为一个环,比如1 1 2,K=3是不是,第一次出现X=2得时候,需要就是可以加到1上,下次出现,是不是就要循环一个K才会出现他的X+k=5,加到第二1上,是不是最后全部就为0了,所以就是找到最小的数并且出现次数最多,然后去处理。

    ll a; cin>>a; while(a--) { map<ll,ll>mp; ll n,k; cin>>n>>k; ll sum=0; for(ll i=1;i<=n;i++) { ll aa; cin>>aa; aa%=k; if(!aa) continue; sum=max(sum,mp[aa]*k+k-aa+1); mp[aa]++; } cout<<sum<<endl; }
    Processed: 0.010, SQL: 9