题目描述:
输入n个整点在平面上的坐标。对于每个点,可以控制所有位于它左下方的点(即x、y坐标都比它小),它可以控制的点的数目称为“战斗力”。依次输出每个点的战斗力,最后输出战斗力最高的点的编号(如果若干个点的战斗力并列最高,输出其中最大的编号)。
输入格式:
第一行一个数n,表示有n个点。
接下来,n行,每行两个整数。
输出格式:
共n+1,每行一个整数。
样例输入:
5 1 1 2 4 3 2 4 5 5 3
样例输出:
0 1 1 3 2 4
提示:
n <= 1000,每个坐标值在20,000以内。
样例解释:
(1,1)左下方没有其他点,所以战斗力为0
(2,4)左下方有(1,1),所以战斗力为1
(3,2)左下方有(1,1),所以战斗力为1
(4,5)左下方有(1,1),(2,4),(3,2),所以战斗力为3
(5,3)左下方有(1,1),(3,2),所以战斗力为2
时间限制: 1000ms
空间限制: 128MB
代码如下:
#include<bits/stdc++.h>
using namespace std;
int main(){
int x[20001],y[20001],n,s=0,max=0,a;
cin>>n;
for(int i=0;i<n;i++){
cin>>x[i]>>y[i];
}
for(int i=0;i<n;i++){
s=0;
for(int j=0;j<n;j++){
if(x[i]>x[j]&&y[i]>y[j]){
s++;
}
}
if(s>=max){
max=s;
a=i;
}
cout<<s<<endl;
}
cout<<a+1;
return 0;
}