好吧,這是我第一次寫模擬賽的訂正,主要是有時間而且這次的題確實好...
第一題確實好,用的演算法人人都會,就是看你能不能想到,我考只打了o(n^4)的暴力,最後還苦逼的mle,爆零了...
暴力就不多說了...列舉兩個點更新其他的點...
其實我考場上思考的是,能被標記的點都與其他的點有什麼聯絡,可惜,除了模擬題目的做法,就不會了...
那讓我們就認真地思考一發:我們設a(x1,x2),b(x2,c2),c(x3,c3)來更新d點,只有:有兩個點橫座標相等,有兩個點縱座標相等,才可以更新出來乙個新的點...
那我們看更新之後又出現了什麼結果,還是有兩個點橫座標相等,有兩個點縱座標相等,這是就要思考了或許我們不必列舉點,而應該在行列之間大做文章...
之後,根據網格題的經驗,我們就連邊,即點a被標記,那我們將行列連邊,之後,我們在手玩一下a,b,c點就會發現,點d的行列已經聯通了...而這就用到了並查集...
其實我們再想想就知道為什麼會是這樣的,因為每個被標記的點都其實提供一種行與列的關係,當兩個對角線的點出現時,目標點的x與y都已經被代表,而此時再出現乙個頂點,就將目標點的行列聯通了...
而這裡有體驗到了並查集的魅力,即維護關係的合併與查詢,而這種關係則需要我們慧眼挖掘...
還有網格題的行列建圖則也是一種好的思路,因為圖論中大量的演算法我們就能利用了...
#includeusingnamespace
std;
const
int n=5100
;int f[n*2
],n,m,q,sum[n][n];
inline
intread()
while(isdigit(ch))
return x*ff;
}inline
int getf(int k)
intmain()
for(register int i=1;i<=n;++i)
for(register int j=1;j<=n;++j)
for(register int i=1;i<=q;++i)
return0;
}
9 23 模擬賽訂正題解
感覺是真的有點鬼畜啊這題目 來自我這個同學的小聲bb 好了 我這個同學又來訂正題目了 t1 驚現數學必修五 數列 裂項相消的 關於帶根號的放縮 別問我怎麼知道的 考試前數學老師發的學案上 印著我們oi考試的t1 很痛心 不上數學課的我 不過 即使沒有那個學案也能搞出來這個題目 因為 只要讀題了 我們...
第三次模擬賽 訂正題解
這次考試是乙個圖論專練,從海亮回來圖論已經搞了好幾個月了,感覺有些問題的思想還是要好好揣摩一下,理解思路才能知道怎麼做 第一題 第一遍沒看見有向圖,建了個圖跑了個tarjan,後來發現讀錯題,我們來看一下謎一樣的水資料,這o n m 的複雜都能過 隨便寫乙個dfs吧,當前點遍歷到的點的個數 1,如果...
《省賽模擬賽補》
c題 比賽的時候已經想到了統計最底層的每個序列的出現次數,但是一開始想的是建圖之後dfs處理,但是發現很難處理出來。其實正確的思路是拓撲排序去處理次數。我們在最後建圖完成之後,倒著從n回去拓撲即可。但是這裡有個坑點,就是一開始統計入度可能是不正確的。例如 3 1 2 4 1 2 3是1,2的父節點,...