2014-11-3 NOIP模擬賽2
NOIP 2014
水題模擬賽
(請選手務必仔細閱讀本頁內容)
一.題目概況
中文題目名稱 |
數列 |
刷漆 |
排隊 |
英文題目與子目錄名 |
seq |
paint |
layout |
可執行文件名 |
seq |
paint |
layout |
輸入文件名 |
seq.in |
paint.in |
layout.in |
輸出文件名 |
seq.out |
paint.out |
layout.out |
每個測試點時限 |
2 秒 |
1 秒 |
1 秒 |
測試點數目 |
10 |
10 |
10 |
每個測試點分值 |
10 |
10 |
10 |
附加樣例文件 |
無 |
無 |
無 |
結果比較方式 |
全文比較(過濾行末空格及文末回車) |
||
題目類型 |
傳統 |
傳統 |
傳統 |
運行內存上限 |
128M |
128M |
128M |
二.提交源程序文件名
對於 C++語言 |
seq.cpp |
paint.cpp |
layout.cpp |
對於 C 語言 |
seq.c |
paint.c |
layout.c |
對於 pascal 語言 |
seq.pas |
paint.pas |
layout.pas |
三.編譯命令(不包含任何優化開關)
對於 C++語言 |
g++ -o seq seq.cpp -lm |
g++ -o paint paint.cpp –lm |
g++ -o layout layout.cpp -lm |
對於 C 語言 |
gcc -o seq seq.c -lm |
gcc -o paint paint.c –lm |
gcc-o layout layout.c -lm |
對於 pascal 語言 |
fpc seq.pas |
fpc paint.pas |
fpc layout.pas |
註意事項:
1、文件名(程序名和輸入輸出文件名)必須使用英文小寫。
2、C/C++中函數 main()的返回值類型必須是 int,程序正常結束時的返回值必須是 0。
3、統一評測時采用的機器配置為:CPU Intel64 Family 6 Model 37 Stepping 5 GenuineIntel ~1199Mhz,內存 4G,上述時限以此配置為準。
5、特別提醒:評測在 Microsoft Windows Technical Preview (Build 9860)下進行。
1.數列
(seq.cpp/c/pas)
【題目描述】
Czy手上有一個長度為n的數列,第i個數為xi。
他現在想知道,對於給定的a,b,c,他要找到一個i,使得a*(i+1)*xi2+(b+1)*i*xi+(c+i)=0成立。
如果有多個i滿足,Czy想要最小的那個i。
Czy有很多很多組詢問需要你回答,多到他自己也不確定有多少組。所以在輸入數據中a=b=c=0標誌著Czy的提問的結束。
更加糟糕的是,Czy為了加大難度,決定對數據進行加密以防止離線算法的出現。
假設你在輸入文件中讀到的三個數為a0,b0,c0,那麽Czy真正要詢問的a=a0+LastAns,b=b0+LastAns,c=c0+LastAns.
LastAns的值是你對Czy的前一個詢問的回答。如果這是第一個詢問,那麽LastAns=0。
所有的詢問都將會按上述方式進行加密,包括標誌著詢問的結束的那個詢問也是這樣。
【輸入】
輸入文件為 seq.in
輸入文件第一行包含一個整數n,表示數列的長度。
輸入文件第二行包含n個整數,第i個數表示xi的值。
接下來若幹行,每行三個數,表示加密後的a,b,c值(也就是上文所述的a0,b0,c0)
【輸出】
輸出文件為 seq.out
包含若幹行,第i行的值是輸入文件中第i個詢問的答案。註意,你不需要對標誌著詢問結束的那個詢問作答。
同時,標誌著詢問結束的詢問一定是輸入文件的最後一行。也就是,輸入文件不會有多余的內容。
【輸入輸出樣例】
seq.in |
seq.out |
5 -2 3 1 -5 2 -5 -4 145 -1 -6 -509 -9 -14 40 -3 -13 21 -3 -3 -3 |
5 4 3 3 |
【數據範圍】
對於40%的數據,滿足N<=1000,需要作出回答的詢問個數不超過1000.
對於100%的數據,滿足N<=50000,需要作出回答的詢問個數不超過500000,xi的絕對值不超過30000,解密後的a的絕對值不超過50000,解密後的b的絕對值不超過10^8,解密後的c的絕對值不超過10^18.
2.刷漆
(paint.cpp/c/pas)
【問題描述】
Czy做完了所有的回答出了所有的詢問,結果是,他因為腦力消耗過大而變得更虛了:)。幫助Czy恢復身材的艱巨任務落到了你的肩上。
正巧,你的花園裏有一個由N塊排成一條直線的木板組成的柵欄,木板從左到右依次標號1到N。這N塊木板中,有M塊木板前面放著一桶油漆。油漆有不同的顏色,每種顏色可以由一個大寫字母表示(A到Z)。而你要求Czy用他的油漆刷子給柵欄刷上油漆。
已知Czy會選擇一個前方放有油漆桶的木板開始他的任務。刷子蘸上油漆後,他開始隨機地沿著柵欄走,他不會走出柵欄的範圍。隨機地走表示Czy會沿著他選擇的方向一直走,然後隨機在任何時候改變方向。沿著柵欄走只有兩個方向,向前和向後。
你發現Czy刷油漆的過程總是符合下列規則:
- 每個油漆桶裏裝著無限多的油漆;
- 刷子上每次只有一種顏色的油漆,每次蘸油漆都會完全替換刷子上的油漆顏色;
- 當Czy走到一個油漆桶前,他會首先用刷子蘸這個油漆桶裏的油漆;
- Czy每走過一個木板都會將這個木板刷成當前刷子上的油漆顏色。
已知木板可以被多次刷上油漆,每次都會完全覆蓋之前的顏色。當所有木板都被刷上了油漆的時候,Czy才能停下來(當然他也可以繼續刷到他想停下來為止)。你看著Czy在柵欄前來回舞動,突然想知道Czy停下來的時候柵欄有多少種可能的不同油漆方案。定義當至少有一塊木板顏色不同時,兩種油漆方案被視為是不同的。
請你輸出不同的油漆方案數對109+9取模的值。
【輸入】
輸入文件為 paint.in。
輸入的第一行包含兩個整數N和M。
接下來M行,每行兩個整數x和y,表示第y塊木板前面有一個裝著顏色為x的油漆的油漆桶。
【輸出】
輸出文件為 paint.out。
輸出一行,包含一個整數,表示不同的油漆方案數對109 + 9取模的結果。
【輸入輸出樣例】
paint.in |
paint.out |
6 2 A 2 B 6 |
4 |
【數據範圍】
對於30% 的數據,1 ≤ M ≤ N ≤ 100。
對於100% 的數據, 1 ≤ M ≤ N ≤ 100000。
x是A到Z之間的大寫字母;1 ≤ y ≤ N。
3.排隊
(layout.cpp/c/pas)
【問題描述】
Czy喜歡將他的妹子們排成一隊。假設他擁有N只妹紙,編號為1至N。Czy讓他們站成一行,等待自己來派送營養餐。這些妹紙按照編號大小排列,並且由於它們都很想早點吃飯,於是就很可能出現多只妹紙擠在同一位置的情況(也就是說,如果我們認為妹紙位於數軸上,那麽多只妹紙的位置坐標可能相同)。
因為眾所周知的原因,某些妹紙之間互相喜歡,他們希望互相之間的距離至多為一個定值。但某些妹紙之間互相厭惡,他們希望互相之間的距離至少為一個定值。現在給定ML個互相喜愛的妹紙對以及他們之間距離的最大值,MD個互相厭惡的妹紙對以及他們之間距離的最小值。
你的任務是計算在滿足以上條件的前提下,幫助Czy計算出編號為1和編號為N的妹紙之間距離的最大可能值。
【輸入】
輸入文件為 layout.in。
第一行有 3 個整數,每兩個整數之間用一個空格隔開,依次表示 n,ML和DL ;
此後ML行,每行包含三個用空格分開的整數A,B和D,其中A,B滿足1<=A<=B<=N。表示編號為A和B的妹紙之間的距離至多為D。
此後MD行,每行包含三個用空格分開的整數A,B和D,其中A,B滿足1<=A<=B<=N。表示編號為A和B的妹紙之間的距離至少為D。
【輸出】
輸出文件名為 layout.out。
輸出文件僅包含一個整數。如果不存在任何合法的排隊方式,就輸出-1。如果編號1和編號N的妹紙間距離可以任意,就輸出-2 。否則輸出他們之間的最大可能距離。
【輸入輸出樣例】
layout.in |
layout.out |
4 2 1 1 3 10 2 4 20 2 3 3 |
27 |
【數據範圍】
對於40%的數據,N<=100;
對於100%的數據,N<=1000;ML,MN<=10000;D<=1000000。
2014-11-3 NOIP模擬賽2