javascript隱式型別轉換
阿新 • • 發佈:2021-01-06
有 N 頭牛站成一行,被編隊為1、2、3…N,每頭牛的身高都為整數。
當且僅當兩頭牛中間的牛身高都比它們矮時,兩頭牛方可看到對方。
現在,我們只知道其中最高的牛是第 P 頭,它的身高是 H ,剩餘牛的身高未知。
但是,我們還知道這群牛之中存在著 M 對關係,每對關係都指明瞭某兩頭牛 A 和 B 可以相互看見。
求每頭牛的身高的最大可能值是多少。
輸入格式
第一行輸入整數N,P,H,M,資料用空格隔開。
接下來M行,每行輸出兩個整數 A 和 B ,代表牛 A 和牛 B 可以相互看見,資料用空格隔開。
輸出格式
一共輸出 N 行資料,每行輸出一個整數。
第 i 行輸出的整數代表第 i 頭牛可能的最大身高。
資料範圍
1≤N≤10000,
1≤H≤1000000,
1≤A,B≤10000,
0≤M≤10000
輸入樣例:
9 3 5 5
1 3
5 3
4 3
3 7
9 8
輸出樣例:
5
4
5
3
4
4
5
5
5
注意:
此題中給出的關係對可能存在重複
核心:兩頭牛互相看見
題目中要求牛的身高最高,可以將每一組關係(A,B)(A,B),看作[A+1,B−1]這組牛身高只比A,B這兩頭牛矮1.
注意:要判重,[l,r]不一定l<r
#include<iostream>
#include<set>
using namespace std;
const int N = 10010;
bool existed[ N];
int height[N];
int main()
{
int n,p,h,m;
cin >> n >> p >> h >> m;
height[1] = h;
//去重
set<pair<int,int>> existed;
for(int i = 0; i < m; i++)
{
int a,b;
cin >> a >> b;
if(a>b) swap(a,b);
if (!existed.count({a,b})) //如果沒有處理過a,b這個關係處理它
{
existed.insert({a,b});
height[a+1]--;
height[b]++;
}
}
//從差分陣列求原陣列
for(int i = 1; i <= n; i++)
{
height[i] += height[i-1];
cout << height[i] << endl;
}
return 0;
}