Codeforces Round #606 (Div. 2, based on Technocup 2020 Elimination Round 4) 构造
傳送門
文章目錄
- 題意:
- 思路:
題意:
給nnn個數,讓你構造一個盡可能大的矩陣,其中每個點所在的行和列都不含相等元素。
思路:
假設構造的答案矩陣大小為a×ba×ba×b且a<=ba<=ba<=b,那么我們可以知道其中最大的相等元素的個數一定<=a<=a<=a,否則一定不能保證每行每列都不相等。
那么我們就可以[1,n][1,n][1,n]枚舉最大的出現次數即aaa,讓后假設選出的元素個數為tottottot,那么b=?tota?b=\left \lfloor \frac{tot}{a} \right \rfloorb=?atot??,讓后取一個最大的就行了。
現在知道矩陣大小a×ba×ba×b了,下面考慮怎么構造答案。
這里直接盜了題解的圖了,順便先把構造方法說了。假設當前位置在(x,y)(x,y)(x,y),那么下一個位置就是((x+1)moda,(y+1)modb)((x+1)\bmod a,(y+1)\bmod b)((x+1)moda,(y+1)modb),當然如果a?aa*aa?a的矩陣的話,這樣寫會一直在主對角線上跑,我們特判一下當前位是否填過了,如果填過的話就x=(x+1)modax=(x+1)\bmod ax=(x+1)moda即可。
其實一開始想到了這樣按照斜著填,但是不知道怎么走才能保證自己的想法能實現出來。
題解((x+1)moda,(y+1)modb)((x+1)\bmod a,(y+1)\bmod b)((x+1)moda,(y+1)modb)這樣很巧妙,如下面4×64×64×6的矩陣,填完5,65,65,6再填7,87,87,8的時候正好保證了這四個元素在不同的行。可以證明每個點所在的行和列都不含相等元素。
總結
以上是生活随笔為你收集整理的Codeforces Round #606 (Div. 2, based on Technocup 2020 Elimination Round 4) 构造的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Codeforces Round #60
- 下一篇: AJAX淋漓尽致的发挥(Google个性