4 条题解

  • 8
    @ 2023-7-25 11:11:10

    用vector最简单。 vector里有一个插入函数insert函数,直接插入。

    #include <vector>
    #include <iostream>
    using namespace std;
    int main(void) {
        vector<int> v;
        v.push_back(1); //初始化
        int N;
        cin >> N;
        for (int i = 2; i <= N; i++) {
            int k, p;
            cin >> k >> p;
            int tmp = v.size();
            for (int n = 0; n < tmp; n++)
                if (v[n] == k) {
                    if (n == tmp - 1 && p == 1) //末尾
                        v.push_back(i);
                    else if(p == 0)
                        v.insert(v.begin() + n, i); //左边
                    else
                        v.insert(v.begin() + n + 1, i); //右边
                    break; //很重要,去除会有重复
                }
        }
        for (int i = 0; i < N; i++)
            cout << v[i] << ' ';
        return 0;
    }
    
  • 3
    @ 2024-3-22 12:29:16

    队列安排 P1059

    思路

    1.准备

    #include <bits/stdc++.h>
    using namespace std;
    vector<int> v;
    int N;
    

    2.输入

    v.push_back(1);
    cin>>N;
    

    3.用vector做,输入k,p,用t存储vector的长度,再遍历v。

    4.①p==0,将i插入到k号同学的左边

    if (j==t-1&&p==1)
        v.push_back(i);
    else if(p==0)
        v.insert(v.begin()+j,i);
    

    ②p==1,将i号同学插入到k号同学的右边

    else
        v.insert(v.begin()+j+1,i);
    

    5.break,不然会有重复

    6.输出

    代码

    #include <bits/stdc++.h>
    using namespace std;
    vector<int> v;
    int N;
    int main(){
        v.push_back(1);
        cin>>N;
        for (int i=2;i<=N;i++) {
            int k,p;
            cin>>k>>p;
            int t=v.size();
            for (int j=0;j<t;j++)
                if (v[j]==k){
                    if (j==t-1&&p==1)
                        v.push_back(i);
                    else if(p==0)
                        v.insert(v.begin()+j,i);
                    else
                        v.insert(v.begin()+j+1,i);
                    break;
                }
        }
        for (int i=0;i<N;i++)
            cout<<v[i]<<' ';
        return 0;
    }
    

    点赞点赞,不点赞,去你家偷你马桶盖!!!

    • -2
      @ 2023-7-6 16:22:58
      思路 这道题比较简单,根据题目要求在合适位置插入元素就可以,参考代码为双链表,也可以用单链表解决。
      代码
      
      #include <iostream>
      using namespace std;
      struct Node
      {
          int pre, nxt;
      } node[100005];
      int N, k, oper, x;
      int head, tail, now;
      int main()
      {
          cin >> N;
          node[1].nxt = -1;
          node[1].pre = -1;
          head = 1;
          for (int i = 2; i <= N; i++)
          {
              cin >> k >> oper;
              if (oper == 1)
              {
                  node[node[k].nxt].pre = i;
                  node[i].nxt = node[k].nxt;
                  node[i].pre = k;
                  node[k].nxt = i;
              }
              else
              {
                  node[i].pre = node[k].pre;
                  node[node[k].pre].nxt = i;
                  node[k].pre = i;
                  node[i].nxt = k;
                  if (k == head)
                      head = i;
              }
          }
          now = head;
          while (now != -1)
          {
              cout << now << " ";
              now = node[now].nxt;
          }
          return 0;
      }
      
      
      • -5
        @ 2023-7-25 15:06:01
        #include <iostream>
        using namespace std;
        struct Node
        {
            int pre, nxt;
        } node[100005];
        int N, k, oper, x;
        int head, tail, now;
        int main()
        {
            cin >> N;
            node[1].nxt = -1;
            node[1].pre = -1;
            head = 1;
            for (int i = 2; i <= N; i++)
            {
                cin >> k >> oper;
                if (oper == 1)
                {
                    node[node[k].nxt].pre = i;
                    node[i].nxt = node[k].nxt;
                    node[i].pre = k;
                    node[k].nxt = i;
                }
                else
                {
                    node[i].pre = node[k].pre;
                    node[node[k].pre].nxt = i;
                    node[k].pre = i;
                    node[i].nxt = k;
                    if (k == head)
                        head = i;
                }
            }
            now = head;
            while (now != -1)
            {
                cout << now << " ";
                now = node[now].nxt;
            }
            return 0;
        }
        
        • @ 2023-9-17 20:07:46

          @丁丁 (hetao1897892),你抄上面人的吧

        • @ 2024-3-16 16:13:37

          @ 就是就是

        • @ 2024-6-13 10:19:04

          @上面是2个月前的好吧,这是是个月前的,好吧;

        • @ 2024-6-13 10:34:04

          @

      • 1

      信息

      ID
      254
      时间
      1000ms
      内存
      256MiB
      难度
      3
      标签
      (无)
      递交数
      761
      已通过
      403
      上传者