【Codeforces 1137A】Skyscrapers

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\)

猜你喜欢

转载自www.cnblogs.com/denverjin/p/10503817.html
今日推荐