CF1426E Rock, Paper, Scissors (思维)

链接

题意:

A和B进行剪刀石头布的游戏,一共进行n局:
A能使用a个石头,b个剪刀,c个布
B能使用x个石头,y个剪刀,z个布
问A最少和最多可以赢多少局?

分析:

看完题直接写就好了,先分析A最少赢多少:
最少赢那就是说A的石头尽量要和B的石头或者布遇见,那么就直接用a-x-z看剩多少石头,如果还剩说明他肯定会遇上B的剪刀,这样A就赢了。同样看剪刀和布就好了

再看A最多赢多少,最多赢就是A的石头尽量遇上B的剪刀,那直接取最大值就行了。

void solve()
{        
    cin>>n;
    ll a,b,c;
    ll ta,tb,tc;
    cin>>a>>b>>c;
    ta=a;tb=b;tc=c;
    ll x,y,z;
    ll tx,ty,tz;
    cin>>x>>y>>z;
    tx=x,ty=y,tz=z;
    ll ans=0,sum=0;
	ll tmp=min(a,y);
	a-=tmp;y-=tmp;
	ans+=tmp;
	tmp=min(b,z);
	b-=tmp,z-=tmp;
	ans+=tmp;
	tmp=min(c,x);
	c-=tmp;x-=tmp;
	ans+=tmp;
	
	
	sum+=max(0ll,ta-tx-tz);
	sum+=max(0ll,tb-tx-ty);
	sum+=max(0ll,tc-ty-tz);
		
	cout<<sum<<" "<<ans<<endl;
}

你可能感兴趣的:(思维,思维)