1. 程式人生 > >2014-11-3 NOIP模擬賽2

2014-11-3 NOIP模擬賽2

排列 空格 window 想要 一個 paint 最大 長度 包括

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