4 条题解
-
8
用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
队列安排 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
思路
这道题比较简单,根据题目要求在合适位置插入元素就可以,参考代码为双链表,也可以用单链表解决。代码
#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
#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; }
- 1
信息
- ID
- 254
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 3
- 标签
- (无)
- 递交数
- 761
- 已通过
- 403
- 上传者