CF1426E Rock, Paper, Scissors
题意:两个人玩石头剪刀布。A 出了 a1 个石头a2 个剪刀a3 个布。B 出了 b1 个石头b2 个剪刀b3 个布。求 A 最少赢的次数和最多赢的次数。 题目中还给了一个无用信息 na1a2a3b1b2b3不过可以使代码更简洁Solution:先考虑第 2 个问题。A 出石头 (a1) 只有对应 B 出剪刀 (b2) 才能赢。那么赢的次数最多是 min(a1,b2)。显然出石头、剪刀、布赢的次数相互独立那么答案即为 min(a1,b2)min(a2,b3)min(a3,b1)。再考虑第 1 个问题。a1 对应不是 b2 的要尽量多。那么不赢的次数最多是 min(a1,n−b2)。注意这一问和上一问不一样出石头、剪刀、布不赢的次数并不相互独立。如果没有 a1a2a3b1b2b3 这个条件就会错。那么在题目这个条件下我们可以根据样例猜到证明答案就是:n−min(a1,n−b2)−min(a2,n−b3)−min(a3,n−b1)。证明:我们考虑出石头和出剪刀互相影响的情况应该是说如果 a1b3 且 a2b2 此时剩余的石头和剩余的剪刀都要放在 B 出石头这个情况下可能会溢出。但是由于 a1a2≤b1b2b3 所以这样的情况并不会发生。#includebits/stdc.h using namespace std; #define int long long int n,a1,a2,a3,b1,b2,b3; signed main(){ scanf(%lld%lld%lld%lld%lld%lld%lld,n,a1,a2,a3,b1,b2,b3); int xn-min(a1,n-b2)-min(a2,n-b3)-min(a3,n-b1); int ymin(a1,b2)min(a2,b3)min(a3,b1); printf(%lld %lld,x,y); return ~(-1); }
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2447111.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!