AcWing 4277. 区块反转
原题链接
简单
作者:
蓬蒿人
,
2023-02-13 20:51:25
,
所有人可见
,
阅读 149
k翻转
#include <iostream>
#include <cstring>
#include <algorithm>
#include <map>
#include <cmath>
using namespace std;
const int N = 200010;
// 相当于将整体翻转后
// 再进行k长度翻转 长度未到k的也翻转
// 这里由于地址全是数字 玩数字游戏即可
// 存入数组 选择输出
// 翻转用reverse
int head,n,k;
int ne[N],w[N],q[N];
int main (){
scanf ("%5d %d %d",&head,&n,&k);
for (int i=0;i<n;i++){
int a,b,c;
scanf ("%5d %d %5d",&a,&c,&b);
ne[a]=b,w[a]=c;
}
int cnt=0;
for (int i=head;~i;i=ne[i]) q[cnt++]=i;
reverse(q,q+cnt);
for (int i=cnt-1;i>=0;i-=k){
reverse(q+max(0,i-k+1),q+i+1);
}
for (int i=0;i<cnt;i++){
if (i) puts("");
int now=q[i],next=q[i+1];
printf ("%05d %d ",now,w[now]);
if (i==cnt-1) printf ("-1");
else printf ("%05d",next);
}
return 0;
}