题目链接:
http://www.sicily.3322.org/sicily/show_problem.php?pid=1934 这题考察的是链表的基本操作,考虑到数据规模不是太大,用数组实现好了,不过这题 Sicily 的数据貌似有点问题,见代码的注释部分,代码如下:
#include <iostream> #include <cstdio> using namespace std;
int prev[501000]; int next[501000]; int main()
{ int t, n
, m;
int q, a, b;
int counter, s;
scanf(
"%d", &t);
while (
t --)
{ scanf(
"%d%d", &n
, &m);
for (
int i = 1;
i <= n
+ 1;
i ++)
{ next[i - 1] = i;
prev[i] = i - 1;
} while (
m --)
{ scanf(
"%d%d%d", &q, &a, &b);
if (
q == 1)
{ next[prev[a]] = next[a]; prev[next[a]] = prev[a]; next[prev[b
]] = a;
prev[a] = prev[b
]; next[a] = b;
prev[b
] = a;
} else //这里之前我写的是 if (q == 2) 结果得到了 N 次 WA,感觉数据貌似有问题 { next[prev[a]] = next[a]; prev[next[a]] = prev[a]; next[a] = next[b
]; prev[next[b
]] = a;
next[b
] = a;
prev[a] = b;
} } counter = 1;
s
= next[0]; while (
counter <= n)
{ printf(
"%d ", s);
s
= next[s
]; counter ++;
} printf(
"\n");
} return 0;
}
评论