B. Balanced Remainders1000 / 思维 贪心
Posted 幽殇默
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了B. Balanced Remainders1000 / 思维 贪心相关的知识,希望对你有一定的参考价值。
https://codeforces.com/problemset/problem/1490/B
你会发现余数为0的个数减1,则余数为1的个数必加1.
以此类推。
我们以中间余数为1的来讨论
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int a[N];
int main(void)
{
int t; cin>>t;
while(t--)
{
int n; cin>>n;
int cnt0,cnt1,cnt2;
cnt0=cnt1=cnt2=0;
for(int i=0;i<n;i++)
{
cin>>a[i];
if(a[i]%3==0) cnt0++;
else if(a[i]%3==1) cnt1++;
else cnt2++;
}
int ans=0;
int temp=n/3;
if(cnt1<=temp)//中间的需要补
{
ans+=temp-cnt1;//1需要这么多
cnt0=cnt0-(temp-cnt1);
if(cnt0<0) ans+=temp+abs(cnt0);//说明我们的cnt0需要 cnt1也需要
else if(cnt0>=0&&cnt0<=temp) ans+=temp-cnt0;//说明cnt0需要
else ans+=2*(temp-cnt2);//说明我们的cnt0很多 cnt2需要
}
else//不需要补
{
ans+=cnt1-temp;
cnt2+=cnt1-temp;
if(cnt2<=temp) ans+=(temp-cnt2)*2;//说明cnt2需要cnt0来补
else ans+=cnt2-temp;//说明cnt0需要cnt2来补
}
cout<<ans<<endl;
}
}
以上是关于B. Balanced Remainders1000 / 思维 贪心的主要内容,如果未能解决你的问题,请参考以下文章
The 13th Chinese Northeast Contest B. Balanced Diet(前缀和)
codefroces 873 B. Balanced Substring && X73(前缀和思想)
Codeforces 873 B. Balanced Substring(前缀和 思维)