蒟蒻第五个点一直WA,求助
查看原帖
蒟蒻第五个点一直WA,求助
238374
Rocking_Yoshi楼主2020/8/15 20:28

第五个点超级的坑 疯狂wa

主要的那个循环中 i代表了用了多少缩小药

拉人是先拉2 再拉1 最后拉3

flag[i]代表 %3==i的随从拉了几个

最后ans处理详见以下样例

7 7
3 3 4 4 4 5 5

7 9
3 4 5 4 5 4 5

7 9
3 3 5 5 5 5 5

就是用完最后一瓶缩小药可以处理完之后 估计还会有一些1和2的随从没有拉 可以用它们来代替之前拉的3的随从

#include<bits/stdc++.h>
using namespace std;

int n,m,i,x,j,mx,ans,a[30005],flag[4];
int main()
{
    ios::sync_with_stdio(false);
	cin>>n>>m;
	for(i=1;i<=n;++i)
		cin>>x,++a[x],mx=max(x,mx);
	if(m==0){
		cout<<"0 0";
		return 0;
	}
	for(i=0;i*3<mx;++i){
		for(j=1;j<4;++j) a[j]=a[j+i*3];
		x=m/2+m%2;
		if(x>a[2]&&!(x-1==a[2]&&a[1]&&m%2))m-=2*a[2],ans+=a[2],flag[2]+=a[2],a[2]=0;else{
			if(m%2&&a[1]) --x,--m,--a[1],++ans;
		    ans+=x;m-=x*2;flag[2]+=x;a[2]-=x;break;}
		if(m>a[1]) m-=a[1],ans+=a[1],flag[1]+=a[1],a[1]=0;else{
		ans+=m;m=0;flag[1]+=m;a[1]-=m;break;}
		if(m%3) x=m/3+1;else x=m/3;
		if(x>a[3]) m-=a[3]*3,ans+=a[3]*4,flag[3]+=a[3];else{
			ans+=x*4;m-=x*3,flag[3]+=x;break;}
	}
	if(i*3>=mx) cout<<"Human Cannot Win Dog\n";else{
		if(a[2]%3==2&&a[1]%3==0) a[1]++,a[2]--;
		x=min(a[1],a[2]%3);
		if(flag[3]>x){
			flag[3]-=x;ans-=x*2;a[2]-=x;a[1]-=x; 
			if(flag[3]>a[2]*2/3){
				flag[3]-=a[2]*2/3;ans-=(a[2]*2/3*4-a[2]);
				ans-=min(flag[3],a[1]/3);
			}else ans-=(flag[3]*4-flag[3]*3/2);
		}else{
			if(a[i]/3>0) ans-=(flag[3]*4-(flag[3]*3/2+flag[3]*3%2));else
			ans-=flag[3]*2;
		}
		if(m==-1&&flag[1]) --ans;
		if(m==-2){if(flag[1]>=2) ans-=2;else if(flag[2]||flag[1]) --ans;}
	    cout<<i<<" "<<ans+i;
	}
	return 0;
}
2020/8/15 20:28
加载中...