1277. 最高的奶牛 (Standard IO)
阿新 • • 發佈:2019-01-25
Description
FJ有N(1 <= N <= 10,000)頭奶牛,編號為1到N,站成一條直線。每頭奶牛自己的身高(正整數,祕密未知),告訴你最高奶牛的身高H及位置I,同時告訴你R(0 <= R <= 10,000)組資訊,每組資訊由兩個數ai,bi組成,表示奶牛ai可以看到奶牛bi,這就意味著奶牛bi的身高至少和奶牛ai的身高一樣高,同時奶牛ai到奶牛bi之間的奶牛身高必須低於奶牛ai
現在要你求出每頭奶牛最高可能的高度,保證有解。
Input
第1行輸入4個空格隔開的整數N,I,H,R 第2到R+1行,每行兩個空格隔開的不同的整數A,B(1<=A,B<=N),表示奶牛A能看到奶牛B 解釋:如果奶牛A和奶牛B一樣高,則可以出現A看到B,B又看到A的情況,如果奶牛A矮於奶牛B,則只可能出現奶牛A看到奶牛B,奶牛B不可能看到奶牛A。
Output
第1到N行,每行一個整數表示每隻奶牛最高可能的高度。
Sample Input
9 3 5 5
1 3
5 3
4 3
3 7
9 8
Sample Output
5
4
5
3
4
4
5
5
5
思路
O(n^2)
暴力,一開始全部高度是最高高度,每輸入a看見b,那麼如果a和b之間所有奶牛有一頭比a高,那麼a與b之間所有奶牛全部減1。
var
s:array[1..10000] of longint;
n,i,h,r,j,k,x,y,p:longint;
begin
readln(n,i,h,r);
for i:=1 to n do
s[i]:=h;
for i:=1 to r do
begin
readln(x,y);
p:=x;
if x>y then
begin k:=x;x:=y;y:=k;end;
for j:=x+1 to y-1 do
if s[j]>=s[p] then
begin
for k:=x+1 to y-1 do
dec(s[k]);
break;
end;
end ;
for i:=1 to n do
writeln(s[i]);
end.