L i n k Link Link
D e s c r i p t i o n Description Description
有 N N N头站成一行,每头牛有自己的高度,现有一头最高的牛 P P P的高度 H H H,还有 R R R对关系,有编号为 a a a的牛和编号为 b b b的牛,他们中间的牛的身高都比a,b矮,问每头牛满足条件的最高高度是多少(整数)
I n p u t Input Input
第1行:四个空格隔开的整数:
N
N
N,
P
P
P,
H
H
H和
R
R
R
2行…R+1:两个不同的空间分开的整数
a
a
a和
b
b
b,(1≤
a
a
a,乙 ≤
b
b
b),表明牛
a
a
a可以看到牛
b
b
b。
O u t p u t Output Output
第1行… N:第i行包含牛i的最大可能高度。
S a m p l e Sample Sample I n p u t Input Input
9 3 5 5
1 3
5 3
4 3
3 7
9 8
S a m p l e Sample Sample O u t p u t Output Output
5
4
5
3
4
4
5
5
5
T r a i n Train Train o f of of T h o u g h t Thought Thought
一开始将所有牛的高度赋为最高值,再算出每头牛被多少括号包括,用高度减下去,最后输出答案就好了
不过数据里面有重复的情况,所以要特判
C o d e Code Code
#include<cstdio>
#include<iostream>
using namespace std;
int n,p,h,r,f[10005],c[10005][10005];
int main()
{
scanf("%d%d%d%d",&n,&p,&h,&r);
for (int i=1; i<=n; ++i)
f[i]=h;//赋值
for (int i=1; i<=r; ++i)
{
int a; int b;
scanf("%d%d",&a,&b);
if (!c[a][b]) {
for (int i=min(a,b)+1; i<max(a,b); ++i)
f[i]--;//减去高度
}
c[a][b]=true;
}
for (int i=1; i<=n; ++i)
printf("%d\n",f[i]);
}