10.9 guz模擬題題解
感謝@guz
顧z的題題解
考試共三道題,其中
第一題help共10個測試點,時間限制為 1000ms,空間限制為 256MB.
第二題escape共20個測試點,時間限制為1000ms2000ms,空間限制1MB16MB。
第三題cure共20個測試點,時間限制為 1000ms,空間限制為 256MB.
PS:題目背景與題目本身無關,可跳過
help
題目背景
在夢中,王 小 呆 到了一個神秘的地方.這裏是昆蟲王國!國王見王 小 呆 好生俊俏,便給了他一杯昆蟲國的老白幹.王 小 呆一口下肚,突然出現了問題!"這酒有毒!"突然,王 小 呆在夢中又睡著了.
題目描述
夢中的王 小 呆餓了!他竟然想吃螞蟻!我們要救他!王 小 呆發現了有n 只 螞蟻排成一隊,每只螞蟻身上有一個編號\(a_i\)
某一段區間中 zmj蟻的數量是
該段區間中不能被這個區間的區間gcd整除的螞蟻的個數。該段區間中不等於區間gcd的螞蟻個數
輸入輸出格式
輸入格式
第一行給出一個整數n ,代表有n 只螞蟻.
第二行給出n 個整數\(a_i,a_2,\dots,a_n\)
第三行給出一個整數 \(m\),代表有 \(m\)次詢問.
接下來\(m\) 行,每一行給定 \(l,r\),詢問 \([l,r]\)裏的zmj 蟻的數量。
PS:找出 蟻之後,王 小 呆 並不會直接吃掉他們.即原序列中 蟻數量不變.
輸出格式 共 m行,每一行對應一個詢問.
輸入輸出樣例
輸入樣例 #1:
5
1 3 2 4 2
4
1 5
2 5
3 5
4 5
輸出樣例 #1:
4
4
1
1
數據規模
對於 30% 的隨機數據 ,\(1\le n\le5000,1\le m\le500,1\le a_i\le10^4\) ,
對於 100% 的隨機數據 , \(1\le n\le10^5,1\le m\le2\times10^4,1\le a_i\le10^9\),
題解
這題有好幾種xjb算法,機房裏面AC的基本上一個人一個算法,那麽我就說說我的算法把。
倍增+樹狀數組。
首先我們可以通過倍增預處理gcd,令f[i][j]
表示第i個點向右跳\(2^j\)
f[i][j]
求法很簡單:
f[i][j]=gcd(f[i][j-1],f[i+(1<<(j-1))][j-1]
。
然後我們就可以在log的時間內求出一個區間的gcd了。所以我們求出所有區間的gcd,然後樹狀數組單點修改,區間查詢。將所有區間按照gcd排序,所有數字也排個序,按照數字大小往樹狀數組裏面塞值就行了。
escape
題目背景
終於王 小 呆被拯救了出來,他再也不想看見 zmj蟻了,可是這時 zmj國的蟻後:zmj 出現了!王 小 呆又被抓入了 zmj國忍受#@¥&!*~的酷刑,當王 小 呆 氣息奄奄的時候, 皇後的一個仆人找到了王 小 呆 ,他要拯救王 小 呆 ,但是在救王 小 呆 之前他要考一考王 小 呆 ,並宣稱如果王 小 呆 答對就會幫助他逃脫.但王 小 呆只剩一口氣了,你能幫助他逃脫嗎?
題目描述
仆人給出了n 個數字,這 n個不超過 n的正整數中, 其中有一個數出現了兩次, 其余的數都只出現了一次, 他想讓王 小 呆求這個出現兩次的數.你能辦到麽?
輸入輸出格式
輸入格式
共兩行.第一行為一個整數 n,代表有\(n\) 個數字.第二行為 n個數字,每兩個整數之間以一個空格間隔.
輸出格式
一個整數,即出現兩次的數.
輸入輸出樣例
輸入樣例 #1:
3
2 3 3
輸出樣例 #1:
3
數據規模
對於 5%的隨機數據, n<=5000
對於 15%的隨機數據,n<=\(10^5\)
對於 50% 的隨機數據,n<=10\(^6\)
對於 100% 的隨機數據\(2\le n\le10^7\),
題解
空間一開始是1MB,std超空間了,後來guz改成了16MB,導致bitset能輕松水過。
我們來算一下bitset的空間:10的7比8Bytes,即1.25MB(那些說應該是1.1920928955078125MB的註意應該是1.1920928955078125MiB而非MB,這是Windows的鍋,//初賽題CCF莫名背鍋)不多扯了
反正我覺得要是內存限制正解能過但是bitset過不了,很不好設置,甚至無法設置。那就說說正解吧。
由於題目裏是小於等於N的正整數,那麽既然有一個數出現了兩次(設為x),那麽恰好有另一個數沒有出現(設為y)。設輸入為a,那麽\(x-y=\sum{a_i}-\sum{i}\),並且\(\displaystyle\frac x y=\frac{\sum{a_i}}{\sum{i}}\)。解這個方程組即可。std在模意義下解的,但是也可以直接開double。
cure
題目背景
從 zmj國逃出來的王 小 呆 遇到了正在駕車的顧z,王 小 呆匆匆忙忙上了顧z的車.(隨隨便便上別人的車真的好嘛?)
偉大的無私的善良的不要臉的顧z看到王 小 呆奄奄一息的樣子,很是心痛,便決定帶他去海邊的沝(zi)吅(xuan)山找那裏的山女芽 佟 雪要千年冰宩來救命.但是上山之前,他們遇到了問題.想要找到山上的山女 芽 佟 雪 ,必須知道她家的溫度.
題目描述
沝(zi)吅(xuan)山永遠刮著風。風從地點 依次吹到地點 1,地點2 直到地點N ,共 N+1個地點。住在地點N。地點 的海拔 ,地點 0的海拔為 0。 風的溫度隨海拔升降而變化。地點 0在海邊,溫度為 0度;對於任一地點 ,從地點i 吹到地點i+1 的風的溫差僅取決於兩地的海拔差。具體來說:
如果 \(A_i=A_{i+1}\),風的溫度不變;
如果 \(A_i<A_{i+1}\)風每爬升1米,溫度就會下降S度;
如果 \(A_i>A_{i+1}\)風每爬升1米,溫度就會升高T度;
沝(zi)吅(xuan)山的地殼運動很強烈。他們得到了Q天來地殼運動的數據。在第j日1<=j<=Q,地點\(L_j,L_{j+1},...,R_j(1\le L_j\le R_j\le N)\)的海拔升高了\(X_j\)。
註意\(x_j\)可能是負數。
他們的任務是,計算每天地殼運動後芽 佟 雪住所的溫度。
輸入輸出格式
輸入格式
第一行有四個整數\(N,Q,S,T\),用空格分隔。 在接下來的N+1行中,第i行(\(1\le i\le N+1\))有一個整數\(A_{i-1}\)。在接下來的Q行中,第j行\((1\le j\le Q)\)有三個整數\(L_j,R_j,X_j\),,用空格分隔。 輸入的所有數的含義見題目描述
輸出格式
共 \(Q\)行,第\(j\) 行\((1\le j\le Q)\) 有一個整數,表示第\(j\) 日地殼運動後 芽 佟 雪住所的溫度。
輸入樣例
2 2 5 5
0
6
-1
1 1 4
1 2 8
輸出樣例
5
-35
數據規模
對於 30% 的數據N,Q<=2000 ,
對於另外20%的數據S=T, , 對於 100%的數據
\(1\le N\le2\times10^5,1\le S,T\le10^6\)
\(A_0=0,|A_i|\le10^6(1\le i\le N)\)
題解
據說這題是裸的差分!!?!?!?不用樹狀數組!?!??!
嗯好像是真的不用。
然而我用了
long long沒開好
數組越界
騙了5分
mdzz
其實樹狀數組只是多一個log,而且常數賊他媽小一定是能AC的。
箰榤煁山。。。
差分就是每次修改去修改兩個端點出溫差相對值,同時直接維護答案。。。
懶得說了
10.9 guz模擬題題解