题意:在n个车厢里只能坐四个人,如果一个车厢里有3或4个学生,学生就不会感动boring,给出了每个车厢学生的个数(<=4),问要满足条件,需要交换最小的次数。
分析:此题是模拟题,有4,3个车厢的学生可以先不管,把2和1的车厢交换,尽量满足3个人,对最少的值无影响。剩余的2和1车厢的个数,依情况而定!
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std ;
int main()
{
int p[5];
int num,ans,n,sum;
while(scanf("%d",&n)!=EOF){
sum=0;
memset(p,0,sizeof(p));
for(int i=0;i<n;i++){
scanf("%d",&num);
sum+=num;
if(num) p[num]++;
}
if(sum==1||sum==2||sum==5){
puts("-1");
continue;
}
ans=0;
if(p[1]>=p[2]){
ans+=p[2];
p[1]-=p[2];
ans+=p[1]/3*2;
p[3]+=p[1]/3;
p[1]%=3;
if(p[1]==1){
if(p[3]>=1) ans+=1;
else ans+=2;
}
else if(p[1]==2) ans+=2;
}else{
ans+=p[1];
p[2]-=p[1];
ans+=p[2]/3*2; //3个2凑成2个3.
p[3]+=p[2]/3;
p[2]%=3;
if(p[2]==1){
if(p[4]>=1) ans+=1;
else ans+=2;
}
else if(p[2]==2) ans+=2;
}
printf("%d\n",ans);
}
return 0 ;
}