主题:小弟挥泪跪求高手请教
ssjian
[专家分:0] 发布于 2010-08-08 12:18:00
小弟看不懂这个结构体的定义,不知其使用方法,以及应用,忘大哥大姐们不吝赐教
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个回复)
沙发
耶路撒冷 [专家分:650] 发布于 2010-08-08 16:29:00
#define IN 1
#define OUT -1这两个宏居然声明在结构体内部?怎么访问?我也想知道答案。除了这两个宏,其他地方和正常的结构体是一样的,没什么可说的吧
板凳
bruceteen [专家分:42660] 发布于 2010-08-08 19:47:00
没看到有任何奇怪的地方,所以不知道你想问什么
3 楼
Screenager [专家分:840] 发布于 2010-08-08 20:40:00
[quote]#define IN 1
#define OUT -1这两个居然声明在结构体内部?怎么访问?我也想知道答案。除了这两个宏,其他地方和正常的结构体是一样的,没什么可说的吧
[/quote]
宏声明在结构体内部和外部都是一样的没有什么区别,一样可以访问。
4 楼
lsdsjy [专家分:0] 发布于 2010-08-08 21:16:00
[quote]#define IN 1
#define OUT -1这两个宏居然声明在结构体内部?怎么访问?我也想知道答案。除了这两个宏,其他地方和正常的结构体是一样的,没什么可说的吧
[/quote]
很奇怪。。。
5 楼
ssjian [专家分:0] 发布于 2010-08-08 21:58:00
小弟看不懂结构体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 楼
ssjian [专家分:0] 发布于 2010-08-08 22:00:00
其源程序为:题目来自杭州电子科技大学,网站是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 楼
Screenager [专家分:840] 发布于 2010-08-08 22:50:00
EVENT() {
}
EVENT(int x, int y1, int y2, int type) :
x(x), y1(y1), y2(y2), type(type) {
}
这是类的构造函数,lz可能还没有学类,struct和class都是声明类的关键字,建议去看看c++的类。
8 楼
cgl_lgs [专家分:21040] 发布于 2010-08-08 22:50:00
您看不懂的那个东西是初始化列表,是C++中构造函数的基本语法之一:)
多看看书吧:)
我来回复