2015 Noip提高組 Day2
P2678 跳石頭
【題目背景】
一年一度的“跳石頭”比賽又要開始了!
【題目描述】
這項比賽將在一條筆直的河道中進行,河道中分布著一些巨大巖石。組委會已經選擇好了兩塊巖石作為比賽起點和終點。在起點和終點之間,有 N 塊巖石(不含起點和終 點的巖石)。在比賽過程中,選手們將從起點出發,每一步跳向相鄰的巖石,直至到達 終點。
為了提高比賽難度,組委會計劃移走一些巖石,使得選手們在比賽過程中的最短跳 躍距離盡可能長。由於預算限制,組委會至多從起點和終點之間移走 M 塊巖石(不能 移走起點和終點的巖石)。
【輸入輸出格式】
輸入格式:
輸入文件名為 stone.in。
輸入文件第一行包含三個整數 L,N,M,分別表示起點到終點的距離,起點和終 點之間的巖石數,以及組委會至多移走的巖石數。
接下來 N 行,每行一個整數,第 i 行的整數 Di(0 < Di < L)表示第 i 塊巖石與 起點的距離。這些巖石按與起點距離從小到大的順序給出,且不會有兩個巖石出現在同 一個位置。
輸出格式:
輸出文件名為 stone.out。 輸出文件只包含一個整數,即最短跳躍距離的最大值。
【輸入輸出樣例】
輸入樣例#1:25 5 2 2 11 14 17 21輸出樣例#1:
4
輸入輸出樣例 1 說明:將與起點距離為 2 和 14 的兩個巖石移走後,最短的跳躍距離為 4(從與起點距離 17 的巖石跳到距離 21 的巖石,或者從距離 21 的巖石跳到終點)。
另:對於 20%的數據,0 ≤ M ≤ N ≤ 10。 對於50%的數據,0 ≤ M ≤ N ≤ 100。
對於 100%的數據,0 ≤ M ≤ N ≤ 50,000,1 ≤ L ≤ 1,000,000,000。
#include<iostream> using namespace std; #define LL long long LL N,M,L,ans,a[100分 二分答案50010]; bool chack(int x){ int sum=0,last=0; for(int i=1;i<=N;i++){ if(a[i]-last<x)sum++; else last=a[i]; if(sum>M)return false; } return true; } int main(){ cin>>L>>N>>M; for(int i=1;i<=N;i++)cin>>a[i];a[++N]=L; int l=0,r=L; while(l<=r){ int mid=(l+r)>>1; if(chack(mid))ans=mid,l=mid+1; else r=mid-1; } cout<<ans; }
P2679 子串
【題目背景】
無
【題目描述】
有兩個僅包含小寫英文字母的字符串 A 和 B。現在要從字符串 A 中取出 k 個互不重疊的非空子串,然後把這 k 個子串按照其在字符串 A 中出現的順序依次連接起來得到一 個新的字符串,請問有多少種方案可以使得這個新串與字符串 B 相等?註意:子串取出 的位置不同也認為是不同的方案。
【輸入輸出格式】
輸入格式:
輸入文件名為 substring.in。
第一行是三個正整數 n,m,k,分別表示字符串 A 的長度,字符串 B 的長度,以及問
題描述中所提到的 k,每兩個整數之間用一個空格隔開。 第二行包含一個長度為 n 的字符串,表示字符串 A。 第三行包含一個長度為 m 的字符串,表示字符串 B。
輸出格式:
輸出文件名為 substring.out。 輸出共一行,包含一個整數,表示所求方案數。由於答案可能很大,所以這裏要求[b]輸出答案對 1,000,000,007 取模的結果。[/b]
【輸入輸出樣例】
輸入樣例#1:6 3 1 aabaab aab輸出樣例#1:
2輸入樣例#2:
6 3 2 aabaab aab輸出樣例#2:
7輸入樣例#3:
6 3 3 aabaab aab輸出樣例#3:
7
對於第 1 組數據:1≤n≤500,1≤m≤50,k=1;
對於第 2 組至第 3 組數據:1≤n≤500,1≤m≤50,k=2; 對於第 4 組至第 5 組數據:1≤n≤500,1≤m≤50,k=m; 對於第 1 組至第 7 組數據:1≤n≤500,1≤m≤50,1≤k≤m; 對於第 1 組至第 9 組數據:1≤n≤1000,1≤m≤100,1≤k≤m; 對於所有 10 組數據:1≤n≤1000,1≤m≤200,1≤k≤m。
P2680 運輸計劃
【題目背景】
公元 2044 年,人類進入了宇宙紀元。
【題目描述】
L 國有 n 個星球,還有 n-1 條雙向航道,每條航道建立在兩個星球之間,這 n-1 條航道連通了 L 國的所有星球。
小 P 掌管一家物流公司,該公司有很多個運輸計劃,每個運輸計劃形如:有一艘物
流飛船需要從 ui 號星球沿最快的宇航路徑飛行到 vi 號星球去。顯然,飛船駛過一條航道 是需要時間的,對於航道 j,任意飛船駛過它所花費的時間為 tj,並且任意兩艘飛船之 間不會產生任何幹擾。
為了鼓勵科技創新,L 國國王同意小 P 的物流公司參與 L 國的航道建設,即允許小 P 把某一條航道改造成蟲洞,飛船駛過蟲洞不消耗時間。
在蟲洞的建設完成前小 P 的物流公司就預接了 m 個運輸計劃。在蟲洞建設完成後, 這 m 個運輸計劃會同時開始,所有飛船一起出發。當這 m 個運輸計劃都完成時,小 P 的 物流公司的階段性工作就完成了。
如果小 P 可以自由選擇將哪一條航道改造成蟲洞,試求出小 P 的物流公司完成階段 性工作所需要的最短時間是多少?
【輸入輸出格式】
輸入格式:
輸入文件名為 transport.in。
第一行包括兩個正整數 n、m,表示 L 國中星球的數量及小 P 公司預接的運輸計劃的數量,星球從 1 到 n 編號。
接下來 n-1 行描述航道的建設情況,其中第 i 行包含三個整數 ai, bi 和 ti,表示第
i 條雙向航道修建在 ai 與 bi 兩個星球之間,任意飛船駛過它所花費的時間為 ti。
接下來 m 行描述運輸計劃的情況,其中第 j 行包含兩個正整數 uj 和 vj,表示第 j個 運輸計劃是從 uj 號星球飛往 vj 號星球。
輸出格式:
輸出 共1行,包含1個整數,表示小P的物流公司完成階段性工作所需要的最短時間。
【輸入輸出樣例】
輸入樣例#1:6 3 1 2 3 1 6 4 3 1 7 4 3 6 3 5 5 3 6 2 5 4 5輸出樣例#1:
11
所有測試數據的範圍和特點如下表所示
請註意常數因子帶來的程序效率上的影響。
2015 Noip提高組 Day2