社区讨论

爬山,最大分数40,悬赏 5r 求调参/找出sb错误

P5544[JSOI2016] 炸弹攻击1参与者 1已保存回复 0

讨论操作

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

当前回复
0 条
当前快照
1 份
快照标识符
@lo12avwj
此快照首次捕获于
2023/10/22 14:02
2 年前
此快照最后确认于
2023/11/02 13:31
2 年前
查看原帖
CPP
#include<bits/stdc++.h>
#define db double 
using namespace std;
const int N = 1e3 + 10;
mt19937 myrand(time(0));
int n, m;
struct node{
	db x, y;
}a[20], b[N], as, now;
db r[20], sumx, sumy, R;
db ans, del, ans_now;
db dis(node a, node b){
	return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
}
db calc(node x){
	db ans = 0;
	db now_r = R;
	for(int i = 1; i <= n; ++i){
		now_r = min(now_r, dis(a[i], x) - r[i]);
	}
	for(int i = 1; i <= m; ++i){
		if(now_r >= dis(x, b[i])) ++ans;
	}
	return ans;
}
void input(){
	cin >> n >> m >> R;
	for(int i = 1; i <= n; ++i) cin >> a[i].x >> a[i].y;
	for(int i = 1; i <= m; ++i) cin >> b[i].x >> b[i].y, sumx += b[i].x, sumy += b[i].y; 
}
void op(int i){
	db T = 2333, delta = 0.996;
	as = {sumx / m, sumy / m};
	while(T > 1e-12){
		now = {as.x + ((rand() << 1) - RAND_MAX) * T, as.y + ((rand() << 1) - RAND_MAX) * T};
		ans_now = calc(now);
		del = ans - ans_now;
		if(del < 0){
			as = now;
			ans = ans_now;
		}
		T = T * delta;
	}
}
int main(){
	srand(1e9 + 7);
	input();
	for(int i = 1; i <= 6; ++i)op(i);
	printf("%0.0lf",ans);
	return 0;
}

回复

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

正在加载回复...