PAT甲級1074【Reversing Linked List(25)】


王道書で逆転の良い方法を見たので,Reverse関数配列の下付きの決定に注意しなければならない.本料理は
coutとprintfの混在
ずっとWA...技術のない涙を残して、コードはとてもこすっていますが、やはり自分の間違いを記録しました.
#include
#include
using namespace std;
const int maxn = 1e6+10;
struct Node{
    int addr;
    int data;
    int next; 
}node[maxn],mynode[maxn];
void Reverse(int st, int ed, int k){
    int mid = (st+ed)/2 - st;
    for(int i = 0; i<=mid; i++){
        Node tmp;
        tmp.data = mynode[i+st].data;
        tmp.addr = mynode[i+st].addr;
        mynode[st+i].data = mynode[ed-i].data;
        mynode[st+i].addr = mynode[ed-i].addr;
        mynode[ed-i].data = tmp.data;
        mynode[ed-i].addr = tmp.addr;
    }

}
int main(){
//  freopen("in.txt", "r", stdin);
    int st, n, k, addr, data, next, p, cnt = 0;
    cin >> st >> n >> k;
    for(int i = 0; i> addr >> data >> next;
        node[addr].data = data;
        node[addr].next = next;
    }
    p = st;
    while(p != -1){
        mynode[cnt].data = node[p].data;
        mynode[cnt].addr = p;
        p = node[p].next;
        cnt++;
    } 
    for(int i = 0; iif(i+k-1 >= cnt) break;
        Reverse(i, i+k-1, k);
    }
    for(int i = 0; iprintf("%05d %d ", mynode[i].addr, mynode[i].data);
        if(i != cnt-1) printf("%05d
"
, mynode[i+1].addr); else printf("-1
"
); } return 0; }