高橋和低橋 csu - 1335
time limit 1000 ms memory limit 131072 kb
有個腦筋急轉彎是這樣的:有距離很近的一高一低兩座橋,兩次洪水之後高橋被淹了兩次,低橋卻只被淹了一次,為什麼?答案是:因為低橋太低了,第一次洪水退去之後水位依然在低橋之上,所以不算「淹了兩次」。舉例說明:
假定高橋和低橋的高度分別是5和2,初始水位為1
第一次洪水:水位提高到6(兩個橋都被淹),退到2(高橋不再被淹,但低橋仍然被淹)
第二次洪水:水位提高到8(高橋又被淹了),退到3。
沒錯,文字遊戲。關鍵在於「又」的含義。如果某次洪水退去之後一座橋仍然被淹(即水位不小於橋的高度),那麼下次洪水來臨水位提高時不能算「又」淹一次。
輸入n座橋的高度以及第i次洪水的漲水水位ai和退水水位bi,統計有多少座橋至少被淹了k次。初始水位為1,且每次洪水的漲水水位一定大於上次洪水的退水水位。
input
輸入檔案最多包含25組測試資料。每組資料第一行為三個整數n, m, k(1<=n,m,k<=105)。第二行為n個整數hi(2<=hi
<=108),即各個橋的高度。以下m行每行包含兩個整數ai和bi(1<=bi
i<=108, ai>bi-1)。輸入檔案不超過5mb。
output
對於每組資料,輸出至少被淹k次的橋的個數。
sample input
2 2 2
2 5
6 2
8 3
5 3 2
2 3 4 5 6
5 3
4 2
5 2
sample output
case 1: 1
case 2: 3
題解:題意大概應該都知道,就不多說了,下面給出兩種解法……
1:二分法……
雖然洪水的的先後不可以排序,但橋的高度可以排序……
開兩個陣列x和y,x存橋的高度,y存被淹的次數……
先說明下乙個函式……
uppper_bound返回第乙個大於a的座標
例如 int x[12]=;
upper_bound(x,x+12,4)-x)=5;
upper_bound(x,x+12,-1)-x)=0;
#include#include#include#include#include#include#include#include#include#include#include#define inf 0x3f3f3f3f
#define ll long long
#define for(i,a,b) for(int i=a;i=k)
ans++;
}printf("case %d: %d\n",s,ans);
}}
csu 1335 高橋和低橋
description 有個腦筋急轉彎是這樣的 有距離很近的一高一低兩座橋,兩次洪水之後高橋被淹了兩次,低橋卻只被淹了一次,為什麼?答案是 因為低橋太低了,第一次洪水退去之後水位依然在低橋之上,所以不算 淹了兩次 舉例說明 假定高橋和低橋的高度分別是5和2,初始水位為1 第一次洪水 水位提高到6 兩...
高橋和低橋 CSU 1335
有個腦筋急轉彎是這樣的 有距離很近的一高一低兩座橋,兩次洪水之後高橋被淹了兩次,低橋卻只被淹了一次,為什麼?答案是 因為低橋太低了,第一次洪水退去之後水位依然在低橋之上,所以不算 淹了兩次 舉例說明 假定高橋和低橋的高度分別是5和2,初始水位為1 第一次洪水 水位提高到6 兩個橋都被淹 退到2 高橋...
CSU1335 高橋和地橋
proble 有個腦筋急轉彎是這樣的 有距離很近的一高一低兩座橋,兩次洪水之後高橋被淹了兩次,低橋卻只被淹了一次,為什麼?答案是 因為低橋太低了,第一次洪水退去之後水位依然在低橋之上,所以不算 淹了兩次 舉例說明 假定高橋和低橋的高度分別是5和2,初始水位為1 第一次洪水 水位提高到6 兩個橋都被淹...