社区讨论
结构体重载和在结构体外面用cmp重载有区别吗
UVA1193Radar Installation参与者 7已保存回复 8
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 8 条
- 当前快照
- 1 份
- 快照标识符
- @mi866czb
- 此快照首次捕获于
- 2025/11/21 09:16 4 个月前
- 此快照最后确认于
- 2025/11/21 09:16 4 个月前
ac代码:(使用结构体重载)
CPP#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
using namespace std;
const int maxn = 1e3+5;
struct Node{
double l, r;
bool operator < (const Node &x) const
{
return l < x.l;
}
}; //使用结构体重载
Node t[maxn];
int main()
{
int n, d;
int cas = 1;
while(scanf("%d%d", &n, &d)){
if(n == 0 && d == 0) break;
int flag = 0;
for(int i = 0; i < n; i++){
double x, y;
scanf("%lf%lf", &x, &y);
double tmpd = d * 1.0;
if(y > tmpd){
flag = 1;
continue;
}
double tmp = sqrt(tmpd*tmpd - y*y);
t[i].l = x * 1.0 - tmp; t[i].r = x * 1.0 + tmp;
}
if(flag) printf("Case %d: -1\n", cas++);
else{
sort(t, t+n);
int pre = 0, ans = 1;
for(int i = 1; i < n; i++){
if(t[pre].r < t[i].l){
ans++;
pre = i;
}
else if(t[pre].r >= t[i].r){
pre = i;
}
}
printf("Case %d: %d\n", cas++, ans);
}
}
return 0;
}
wrong answer:(使用cmp)
CPP#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
using namespace std;
const int maxn = 1e3+5;
struct Node{
double l, r;
}t[maxn];
bool cmp(const Node &A, const Node &B){
A.l < B.l;
}
int main()
{
int n, d;
int cas = 1;
while(scanf("%d%d", &n, &d)){
if(n == 0 && d == 0) break;
int flag = 0;
for(int i = 0; i < n; i++){
double x, y;
scanf("%lf%lf", &x, &y);
double tmpd = d * 1.0;
if(y > tmpd){
flag = 1;
continue;
}
double tmp = sqrt(tmpd*tmpd - y*y);
t[i].l = x * 1.0 - tmp; t[i].r = x * 1.0 + tmp;
}
if(flag) printf("Case %d: -1\n", cas++);
else{
sort(t, t+n, cmp);
int pre = 0, ans = 1;
for(int i = 1; i < n; i++){
if(t[pre].r < t[i].l){
ans++;
pre = i;
}
else if(t[pre].r >= t[i].r){
pre = i;
}
}
printf("Case %d: %d\n", cas++, ans);
}
}
return 0;
}
为什么会有区别
回复
共 8 条回复,欢迎继续交流。
正在加载回复...