0
点赞
收藏
分享

微信扫一扫

PAT甲级——1165 Block Reversing (25 分)

椰果玩安卓 2022-02-15 阅读 38

在这里插入图片描述
题目:
按一定的长度整体翻转

思路:
定义node然后模拟就好

src:

#include<bits/stdc++.h>
using namespace std;

struct node {
    int val, next;
}nodeList[100010];

int main() {
    int start, n, k;
    cin >> start >> n >> k;
    for(int i = 0; i < n; i++) {
        int index;
        cin >> index;
        cin >> nodeList[index].val;
        cin >> nodeList[index].next;
    }
    // get the sll
    vector<int> v;
    int p = start;
    while(p != -1) {
        v.push_back(p);
        p = nodeList[p].next;
    }
    //cout << v[1] << endl;
    int m = v.size();
    //int q = m / k;
    int r = m % k;
    
    int next = m - r - k;
    if(r != 0) {
        for(int i = m - r; i < m; i++) {
            if(i != m - 1) printf("%05d %d %05d\n", v[i], nodeList[v[i]].val, v[i + 1]); 
            else printf("%05d %d %05d\n", v[i], nodeList[v[i]].val, v[next]);
        }
    }
    
    while(next >= 0) {
        int now = next;
        next -= k;
        for(int i = now; i < now + k; i++) {
            if(i != now + k - 1) printf("%05d %d %05d\n", v[i], nodeList[v[i]].val, v[i + 1]); 
            else {
                if(next >= 0) printf("%05d %d %05d\n", v[i], nodeList[v[i]].val, v[next]);  
                else printf("%05d %d -1\n", v[i], nodeList[v[i]].val); 
            }
        }
    }
    return 0;
}

总结:
就是有点恶心,找到start的index往后输出k个就好了

举报

相关推荐

0 条评论