共42道题,当前是第15

初赛真题

(坐标统计)输⼊ n 个整点在平⾯上的坐标。对于每个点,可以控制所有位于它左下⽅的点(即 x、y 坐标都⽐它⼩),它可以控制的点的数⽬称为 “战⽃⼒”。依次输出每个点的战⽃⼒,最后输出战⽃⼒最⾼的点的编号(如果若⼲个点的战⽃⼒并列最⾼,输出其中最⼤的编号)

#include <iostream>
using namespace std;

const int SIZE = 100;
int x[SIZE], y[SIZE], f[SIZE];
int n, i, j, max f, ans;

int main() {
	cin >> n;
	for (i = 1; i <= n; i++) cin >> x[i] >> y[i];
	max_f = 0;
	for (i = 1; i <= n; i++) {
		f[i] = ___(1)___;
		for (j = 1; j <= n; j++) {
			if (x[j] < x[i] && ___(2)___) ___(3)___;
		}
		if (___(4)___) {
			max_f = f[i];
			___(5)___;
		}
	}
	for (i = 1; i <= n; i++) cout << f[i] << endl;
	cout << ans << endl;
	return 0;
}

1. A。
2. B。
3. B。
4. B。
5. C。

通过枚举的⽅式计算每个点的战⽃⼒,并且将每个点的战⽃⼒与全局最⼤值进⾏判断。要注意的是题⽬中提出了在战⽃⼒相同的情况下选择编号⼤的点,所以代码中是从⼩到⼤枚举点,并在 `f[i]` 与 `max_f` 相等时也进⾏答案的更新。

Question

1. (1) 处应填( )

2. (2) 处应填( )

3. (3) 处应填( )

4. (4) 处应填( )

5. (5) 处应填( )

陈伦制作 版权所无 粤ICP备16127491号-1