社区讨论
爬山,最大分数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 条回复,欢迎继续交流。
正在加载回复...