Codeforces Round 573

说实话,这次Codeforces不难。但是我太菜了🥬

A 送分

a%4有四种情况,每种一个结果。纯送分题

B 日麻

s m p 三种花色,每种1-9。可以和牌的有三张相同和同花顺子。然后给三张牌,问在加几张就有一套和牌。

解答

其实也是送分题。但是很麻烦,需要考虑很多情况。

落败

通过了pretest,但是最后验证的时候失败了。原因是我先把输入的三张牌排了顺序,然后在后面的计算里有一个状况不小心改成了v.push_back(a[2]) v.push_back(a[1])顺序搞反了!

C 抽牌

1..N一共N张牌,每K张算一页。有M张特殊牌,每次从最前面那张特殊牌所在的页面里把所有特殊牌都抽走,剩下的牌向前补空。

大概是这样

解答

直接循环特殊牌,记录当前页面。特殊牌的实际位置=点数-已经抽走的牌数。然后判断是否与前一张牌的同一页。不是同一页就更新页面、cnt++。

落败

我的代码是对的。但是没注意到K可以到$10^{15}$,需要使用int64_t存储。第二点是,我的电脑上scanf("%ld",&n)就够了,codeforces上需要scanf("%lld",&n)。用long longint64_t靠谱啊!!!!!

D 抽石头

有N个箱子,每个箱子里有$a_i$个石头。两个人游戏,轮流从任意一个箱子里取一块石头。如果在取之前全部箱子都是空的或者取之后有两个箱子内石头数相同,则判负。问最终谁会赢。

解答

先排序,判断最开始的时候有没有相同石头数箱子。有多余一对,第一个人输;有一对,其中有m块石头,但是有一个箱子有m-1块石头,第一个人输。剩下的情况总可以把石头取成 0 1 2 3 4..N-1这种排列,因此直接计算$\sum_{i=1}^Na_i-\sum_{i=0}^{N-1}i$ 就是需要取的石头数,是奇数的时候第一个人赢,偶数的时候第二个人赢。因此这里避免溢出可以用mod 2方式计算。

落败

我输了,因为取之前全部箱子都是空的看成了之后😭,因此还专门对只有一个箱子的时候做了修改,因为1 1的时候,如果是之后不能全空,那么就是第二个人赢不是第一个人赢。

E 翻牌子

有N张牌,两个人轮流操作,每个人选连续K张使其都是背面朝上或正面朝上。某人操作结束后全部牌朝向相同则胜利。问谁会赢。

..待续

F 平面划分


平面上N个点,问有多少种包含不同点的矩形窗类。如上图六个矩形窗包含不同的点。答案是6。