社区讨论
关于尼姑测评机
学术版参与者 2已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @m2j5f2zf
- 此快照首次捕获于
- 2024/10/21 23:05 去年
- 此快照最后确认于
- 2025/11/04 16:34 4 个月前
如下这段代码:
CPP#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
#define first fi
#define second se
const int MAXN = 2e5 + 5;
int n, flag = -1, tot, tmp;
struct node{
int lst = -1, nxt = -1;//表示当前块的前一个块和后一个块
queue<int> q;//使用队列储存每个块的水果
} a[MAXN];
void add() {
flag = tmp;
a[tot].nxt = ++tot;
a[tot].lst = tot - 1;
return ;
}
void merge(int k) {
if(a[k].nxt == -1) {//特殊处理块的尾部
a[a[k].lst].nxt = -1;
}
else if(a[k].lst == 0) {//特殊处理块的头部
a[0].nxt = a[k].nxt;
a[a[k].nxt].lst = 0;
}
else {//处理除了尾部和头部中间的块
int u = a[k].lst, v = a[k].nxt;
// cout << u << ' ' << v << '\n';
while(!a[v].q.empty()) {//合并两个相同块的水果
a[u].q.push(a[v].q.front());
a[v].q.pop();
}
a[u].nxt = a[v].nxt;
if(a[u].nxt != -1) {
a[a[v].nxt].lst = u;
}
}
return ;
}
int main() {
// freopen("data.in", "r", stdin);
// freopen("test.out", "w", stdout);
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
cin >> n;
for(int i = 1; i <= n; ++i) {
cin >> tmp;
if(tmp != flag) {
add();
}
a[tot].q.push(i);
}
// for(int i = 0; i <= tot; ++i) {
// cout << i << ':' << '\n';
// cout << a[i].lst << ' ' << a[i].nxt << '\n';
// while(!a[i].q.empty()) {
// cout << a[i].q.front() << ' ';
// a[i].q.pop();
// }
// cout << '\n';
// }
while(a[0].nxt != -1) {
for(int i = a[0].nxt; i != -1; i = a[i].nxt) {
if(!a[i].q.empty()) {
cout << a[i].q.front() << ' ';
a[i].q.pop();
}
}
cout << '\n';
for(int i = a[0].nxt; i != -1; i = a[i].nxt) {
if(a[i].q.empty()) {
merge(i);
i = a[i].lst;//本人错误所在
}
}
// cout << endl << endl << endl;
// for(int i = a[0].nxt; i != -1; i = a[i].nxt) {
// cout << i << ':' << '\n';
// cout << a[i].lst << ' ' << a[i].nxt << '\n';
// }
// cout << endl << endl << endl;
}
return 0;
}
是我写的P7912小熊的果篮,我两个小样例和一个大样例全过了,我甚至用讨论区的hack生成器和正解拍了拍,拍到几百个没有任何差异,但叫上去就是全WA。我甚至还把原题的一个样例下载了下来,明明输出一模一样却还是WA,十分不理解,求各位大佬解答。
回复
共 3 条回复,欢迎继续交流。
正在加载回复...