【模拟】ZOJ-3590 -3+1

来源:互联网 发布:电脑直播笑声软件 编辑:程序博客网 时间:2024/05/16 20:27

今天浙大校赛最水的一道题,纯模拟……具体见代码……

题目

#include<iostream>#include<cstdio>using namespace std;template<class T> T Max(T x,T y){return x>y?x:y;}template<class T> T Min(T x,T y){return x<y?x:y;}int main(){long long i,l,n,d,x,a[3];              //这里不能用int,因为已超范围。而浙大只能用long long,为此CE一次,以后切记while(scanf("%lld",&n)!=EOF){l=a[1]=a[2]=0;for(i=0;i<n;i++){scanf("%lld",&x);a[x%3]++;              //能减去3的都减,并记录剩下多少1和2l+=x/3;}d=l;while(a[2]){x=Min(a[2],d);              //加1去把所有的2减去l+=x;a[2]-=x;}while(1){if(a[1]){x=Min(a[1],d/2);              //加2把所有的1减去a[1]-=x;d-=x;}else              //本来的都减去了,就另外处理+1多出的数{x=d/3;d-=x*2;}l+=x;if((a[1]==0&&d<=2)||(a[1]&&d<2))break;              //如果不能再减下去就结束}printf("%lld\n",l);}return 0;}