回 帖 发 新 帖 刷新版面

主题:小弟挥泪跪求高手请教

小弟看不懂这个结构体的定义,不知其使用方法,以及应用,忘大哥大姐们不吝赐教
struct EVENT {
#define IN 1
#define OUT -1
    int x, y1, y2, type;
    EVENT() {
    }
    EVENT(int x, int y1, int y2, int type) :
        x(x), y1(y1), y2(y2), type(type) {
    }
    bool operator <(const EVENT &e) const {
        return x < e.x;
    }
};
EVENT E[N * 10];

回复列表 (共8个回复)

沙发

#define IN 1
#define OUT -1这两个宏居然声明在结构体内部?怎么访问?我也想知道答案。除了这两个宏,其他地方和正常的结构体是一样的,没什么可说的吧

板凳

没看到有任何奇怪的地方,所以不知道你想问什么

3 楼

[quote]#define IN 1
#define OUT -1这两个居然声明在结构体内部?怎么访问?我也想知道答案。除了这两个宏,其他地方和正常的结构体是一样的,没什么可说的吧
[/quote]
宏声明在结构体内部和外部都是一样的没有什么区别,一样可以访问。

4 楼

[quote]#define IN 1
#define OUT -1这两个宏居然声明在结构体内部?怎么访问?我也想知道答案。除了这两个宏,其他地方和正常的结构体是一样的,没什么可说的吧
[/quote]
很奇怪。。。

5 楼

小弟看不懂结构体EVENT里面还定义下面的
EVENT() {
    }
    EVENT(int x, int y1, int y2, int type) :
        x(x), y1(y1), y2(y2), type(type) {
    }
想问一下
EVENT() {
    }
    EVENT(int x, int y1, int y2, int type) :
        x(x), y1(y1), y2(y2), type(type) {
    }
这两个有何作用?
尤其是EVENT(int x, int y1, int y2, int type) :
        x(x), y1(y1), y2(y2), type(type) {
    }
表示什么意思?x(x)等等表示什么意思?是函数吗?

6 楼

其源程序为:题目来自杭州电子科技大学,网站是http://acm.hdu.edu.cn/
是问题3265 posters
// HDU 3265 Posters
#include <cstdio>
#include <cstring>
//#include<cmath>
#include <algorithm>
using namespace std;
#define N 50005
struct NODE {
    int l, r, len, cover;
};
NODE T[N * 10];
typedef long  LL;
struct EVENT {
#define IN 1
#define OUT -1
    int x, y1, y2, type;
    EVENT() {
    }
    EVENT(int x, int y1, int y2, int type) :
        x(x), y1(y1), y2(y2), type(type) {
    }
    bool operator <(const EVENT &e) const {
        return x < e.x;
    }
};
EVENT E[N * 10];
int n;
void build(int p, int l, int r) {
    T[p].l = l, T[p].r = r, T[p].len = 0, T[p].cover = 0;
    if (r - l == 1){
        T[p*2].len = T[p*2].cover = T[p*2+1].len = T[p*2+1].cover=0;
        return ;
    }
    int mid = (l + r) >> 1;
    build(p * 2, l, mid);
    build(p * 2 + 1, mid, r);
}
void update(int p) {
    if (T[p].cover > 0) T[p].len = T[p].r - T[p].l;
    else T[p].len = T[p * 2].len + T[p * 2 + 1].len;
}
void change(int p, int l, int r, int ch) {
    if (l >= T[p].r || r <= T[p].l) return;
    if (l <= T[p].l && T[p].r <= r) T[p].cover += ch;
    else {
        change(p * 2, l, r, ch);
        change(p * 2 + 1, l, r, ch);
    }
    update(p);
}
int max(int a,int b)
{
    //int temp;
    if(a>=b)
        return a;
    else
        return b;
    return 0;
}
 
void solve() {
    int i, cnt = 0, maxy = 0;
    LL ans = 0;
    for (i = 0; i < n; i++) {
        int x1, y1, x2, y2, x3, y3, x4, y4;
        scanf("%d%d%d%d%d%d%d%d", &x1, &y1, &x2, &y2, &x3, &y3, &x4, &y4);
        maxy = max(maxy, y2);
        if (x1 != x3 && y1 != y2) E[cnt++] = EVENT(x1, y1, y2, IN), E[cnt++] = EVENT(x3, y1, y2, OUT);
        if (x3 != x4 && y1 != y3) E[cnt++] = EVENT(x3, y1, y3, IN), E[cnt++] = EVENT(x4, y1, y3, OUT);
        if (x3 != x4 && y2 != y4) E[cnt++] = EVENT(x3, y4, y2, IN), E[cnt++] = EVENT(x4, y4, y2, OUT);
        if (x4 != x2 && y1 != y2) E[cnt++] = EVENT(x4, y1, y2, IN), E[cnt++] = EVENT(x2, y1, y2, OUT);
    }
    sort(E, E + cnt);
    build(1, 0, maxy);
    change(1, E[0].y1, E[0].y2, E[0].type);
 
    for (i = 1; i < cnt; i++) {
        LL dx = E[i].x - E[i - 1].x;
        ans += dx * T[1].len;
        change(1, E[i].y1, E[i].y2, E[i].type);
    }
    printf("%d\n", ans);
}
int main() {
    //    freopen("in.txt", "r", stdin);
    while (scanf("%d", &n) && n)
        solve();
    return 0;
}

7 楼

EVENT() {
    }
    EVENT(int x, int y1, int y2, int type) :
        x(x), y1(y1), y2(y2), type(type) {
    }
这是类的构造函数,lz可能还没有学类,struct和class都是声明类的关键字,建议去看看c++的类。

8 楼

您看不懂的那个东西是初始化列表,是C++中构造函数的基本语法之一:)
多看看书吧:)

我来回复

您尚未登录,请登录后再回复。点此登录或注册