社区讨论

虽然ac但仍有组来及讨论区的测试数据未过,求调

P1158[NOIP 2010 普及组] 导弹拦截参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@mhj0ivgu
此快照首次捕获于
2025/11/03 18:44
4 个月前
此快照最后确认于
2025/11/03 18:44
4 个月前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;
int x11, x22, y11, y22, n, sum, sm2;

struct df {
	int dx;
	int dy;
	int s1;

};

bool pai(df a, df b) {
	return a.s1 < b.s1;
}

int ju(int ax1, int ay1, int ax2, int ay2) {
	return (ax1 - ax2) * (ax1 - ax2) + (ay1 - ay2) * (ay1 - ay2);
}

int main() {
	struct df s[100005];

	cin >> x11 >> y11 >> x22 >> y22;
	cin >> n;
	for (long long g = 1; g <= n; g++) {
		cin >> s[g].dx >> s[g].dy;
		s[g].s1 = -1;
	}
	//memset(s.s1, -1, n * sizeof(long long));

	for (int i = 1; i <= n; i++) {
		s[i].s1 = ju(s[i].dx, s[i].dy, x11, y11);
	}//#cengjingyougeruwanglebi1he2debanjingdaxiaodaozhidele40fen
	sort(s + 1, s + 1 + n, pai);
	sum = s[n].s1;
	sm2 = -1;
	for (int i = n - 1; i >= 1; i--) {
		if (ju(x22, y22, s[i + 1].dx, s[i + 1].dy) >= sm2) {
			sm2 = ju(x22, y22, s[i + 1].dx, s[i + 1].dy);
		}
		sum = min(sum, sm2 + s[i].s1);
		/*if (sm2 > ju(x22, y22, s[i].dx, s[i].dy)) {
			sum = min(sum, sm2);
		}*/
	}
	if (n == 1) {
		sum = min(ju(x22, y22, s[1]. dx, s[1]. dy), s[1].s1);
	}
	cout << sum << endl;


	//sort(s.s1 + 1, s.s1 + 1 + n);
	//sort(s.s2 + 1, s.s2 + 1 + n);
	//cout<<s.s1[n]<<" "<<s.s2[n]<<endl;

}
//#zuihouganxiesuoyouzizaoshuzuderen
/*0 0 10 0
3
-3 3
-3 3
10 15
__225*/
尾段注释为测试数据及输出正确答案。 建议加强数据 @沉石鱼惊旋 @cff_0102 @luogu_gza

回复

1 条回复,欢迎继续交流。

正在加载回复...