【Codeforces Round 1137】Codeforces #545 (Div. 1)

Codeforces Round 1137

这场比赛做了\(A\)\(B\),排名\(376\)

主要是\(A\)题做的时间又长又交了两次\(wa4\)的。

这两次错误的提交是因为我第一开始想的求最大值很不对,竟然还有\(min\)在里面。。。

Codeforces 1137 A

题意:给一个矩阵,问对于每一个格子\((x,y)\),把第\(x\)行和第\(y\)列的值取出,要求将它们每一个赋上一个正整数,要求同一行、列中大小关系依然相同,问最大的数。

思路:我们先考虑每一行(列)的数们把它们赋成一个个正整数,然后发现就是求这个行(列)中有多少个互不相同的数,所以将每一行(列)的数排序去重,再来考虑把行列结合的问题。

然后我们发现在结合行列的时候我们应该看这一行、列中此数是第几个,记为\(C_x,C_y\)。然后记这一行、列各有多少个不同的数,记为\(S_x,S_y\)。然后我们可以发现我们的\((x,y)\)这个数必须赋成\(max(C_x,C_y)\)这个数,要不然如果赋了\(min(C_x,C_y)\)就会发生\(max(C_x,C_y)\)所对应行(列)的最小值小于等于\(0\)的情况。

所以假设\(C_x>C_y\),如果不是就\(swap\)一下。

然后考虑答案。我们只用以\(max(S_x,S_y+C_x-C_y)\)作为答案即可。就是考虑行和列的最大值,对于列来说我们将原来的\(C_y\)改为现在的\(C_x\),那么最大的就会加上一个\(C_x-C_y\)

Codeforces 1137 B

题意:给两个串\(S\)\(T\),问将\(S\)中字符任意调换后出现\(T\)次数最多的方案。

思路:我们首先考虑怎么样放\(T\)才是最优的。我们直观上考虑前后两个\(T\)的出现肯定要重叠一定的面积,那么我们考虑\(T\)的最长的与前缀相同的后缀\(T'\),我们最终的答案希望是这样的:\(TT...TT'\)

所以我们枚举\(T'\)出现的次数,看\(S\)中字符是不是够即可。\(T'\)的长度需要用\(Z\_function\)或KMP来求。我考试的时候忘了KMP怎么写,于是就用\(Z\_Function\)代替。掌握不熟练。

猜你喜欢

转载自www.cnblogs.com/denverjin/p/10503642.html