社区讨论

结构体重载和在结构体外面用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 条回复,欢迎继续交流。

正在加载回复...