2963: 【例75.1】 坐标统计
内存限制:64 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:1
解决:1
题目描述
输入$n$个点在平面上的坐标(横纵坐标都是整数),对于每个点可以控制所有位于它左下方的点(即横坐标$x$和纵坐标$y$都比它小),它可以控制的点的数目称为“战斗力”。依次输出每个点的战斗力,最后输出战斗力最高的点的编号(如果若干个点的战斗力并列最高,输出其中最大的编号)。
输入
输入第一行包含一个正整数$n$ ($1≤n≤100$);接下来的$n$行,每行描述一个点的坐标,第$i+1$行包含两个正整数$x$和$y$ ($1≤x,y≤1000$),表示编号为$i$的点的横坐标为$x$,纵坐标为$y$。
输出
输出共有$n+1$行,第$1$行到第$n$行,每行包含一个整数,第$i$行的整数表示编号为$i$的点的战斗力,第$n+1$行表示战斗力最高的点的编号。
样例输入 复制
6
4 2
6 6
4 8
15 6
11 9
8 14
样例输出 复制
0
1
0
1
3
3
6
提示
#include<iostream> using namespace std; struct node { int x, y; } a[10005]; int sum[10005], maxn, ans; int main() { int n; cin >> n; for (int i = 1; i <= n; i++) cin >> a[i].x >> a[i].y; for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) if (a[i].x > a[j].x && a[i].y > a[j].y) sum[i]++; if (sum[i] >= maxn) ans = i, maxn = sum[i]; } for (int i = 1; i <= n; i++) cout << sum[i] << endl; cout << ans << endl; return 0; }