1. 程式人生 > >10.9 guz模擬題題解

10.9 guz模擬題題解

cap 機房 sum 輸入格式 裏的 沒有 esc 給定 gcd

感謝@guz

顧z的題題解

考試共三道題,其中

第一題help共10個測試點,時間限制為 1000ms,空間限制為 256MB.

第二題escape共20個測試點,時間限制為1000ms2000ms,空間限制1MB16MB。

第三題cure共20個測試點,時間限制為 1000ms,空間限制為 256MB.

PS:題目背景與題目本身無關,可跳過

help

題目背景

在夢中,王 小 呆 到了一個神秘的地方.這裏是昆蟲王國!國王見王 小 呆 好生俊俏,便給了他一杯昆蟲國的老白幹.王 小 呆一口下肚,突然出現了問題!"這酒有毒!"突然,王 小 呆在夢中又睡著了.

題目描述

夢中的王 小 呆餓了!他竟然想吃螞蟻!我們要救他!王 小 呆發現了有n 只 螞蟻排成一隊,每只螞蟻身上有一個編號\(a_i\)

他想吃掉他們。但是這些螞蟻部分是有毒的,我們為了救他,只能幫他挑選出zmj蟻.吃了zmj 蟻,王 小 呆才能恢復正常.

某一段區間中 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\)

步路上所有數的gcd。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模擬題題解