RE求助

P2289 [HNOI2004] 邮递员

@[limaopipi2022](/user/160839) 你要考虑a[0]可能为0的情况。你用: ``` for (int i = n.a[0] - 1; i; --i) ``` 可能会造成无限循环。应该改成: ``` friend std::ostream & operator<<(std::ostream & a, ll n) { printf("%d", n.a[n.a[0]]); for (int i = n.a[0] - 1; i >= 0; --i) printf("%04d", n.a[i]); return a; } ``` 另外: ``` inline void Insert(int sta,ll num) { int T=sta%100; for(Hash*i=h[T];i;i=i->nx)if(sta==i->sta)return void(i->num+=num); s[now][++cnt[now]]={sta,num,h[T]};h[T]=s[now]+cnt[now]; } ``` 是一个无返回值的函数,但是你又: ``` return void(i->num+=num); ``` 这种操作我从来没见过,又不是返回指针。
by metaphysis @ 2020-05-04 19:34:19


@[metaphysis](/user/333388) 下面返回void类型,所以我强转void
by Prean @ 2020-05-04 19:34:57


@[limaopipi2022](/user/160839) 没有返回值,不用返回,也不用强制转换。除非你是这样的函数: ``` void* f(int n) { int *r; //... return (void *)r; } ```
by metaphysis @ 2020-05-04 19:43:36


@[metaphysis](/user/333388) 那我怎么写?写 ```cpp return i->num+=num,void(); ``` 吗( 而且这个也没问题啊(
by Prean @ 2020-05-04 19:49:37


@[limaopipi2022](/user/160839) ``` inline void Insert(int sta, ll num) { int T = sta % 100; for (Hash * i = h[T]; i; i = i->nx) if (sta == i->sta) i->num += num; s[now][++cnt[now]] = { sta, num, h[T]}; h[T] = s[now] + cnt[now]; } ```
by metaphysis @ 2020-05-04 19:52:37


@[metaphysis](/user/333388) 不是没有返回值啊。。。 void是void类型而不是没有,要返回一个void型的变量,而我算出来之后强转void,返回的也是void,根本不会出问题好吧QwQ
by Prean @ 2020-05-04 19:52:59


@[metaphysis](/user/333388) 我喷,这是哈希,你找到重复了的就要返回啊。。。。。。
by Prean @ 2020-05-04 19:53:30


@[limaopipi2022](/user/160839) 可以换个方式返回,这样不规范。
by metaphysis @ 2020-05-04 19:56:39


我没有具体看你代码的意图,不知道你是要判重。
by metaphysis @ 2020-05-04 19:57:43


@[metaphysis](/user/333388) 然而这样是没问题的,我插头DP模板题的哈希也是这样的,假如你看不顺眼的话在你眼里不是这样就行了 并且我写出这一段代码的时候编译器并没有骂我
by Prean @ 2020-05-04 19:58:05


| 下一页