
1.P3156 【深基15.例1】询问学号#includeiostream #includevector using namespace std; const int N 2e65; vectorint a(N); int main(){ int n,m; cin n m; for(int i 1;in;i) cin a[i]; int x; while(m--){ cin x; cout a[x]endl; } return 0; }2.P3613 【深基15.例2】寄包柜#includeiostream #includevector using namespace std; const int N 1e55; vectorint a[N]; int main(){ int n,q; cin n q; while(q--){ int op,i,j,k;cin op i j; if(op 1){ cin k; if(a[i].size()j){ a[i].resize(j1); } a[i][j] k; } else cout a[i][j] endl; } return 0; }3.283. 移动零class Solution { public: void sortColors(vectorint nums) { int n nums.size(); int left -1, right n, i 0; while(i right) { if(nums[i] 0) swap(nums[left], nums[i]); else if(nums[i] 1) i; else swap(nums[--right], nums[i]); } } };4.75. 颜⾊分类class Solution { public: void sortColors(vectorint nums) { int n nums.size(); int left -1, right n, i 0; while(i right) { if(nums[i] 0) swap(nums[left], nums[i]); else if(nums[i] 1) i; else swap(nums[--right], nums[i]); } } };5.合并两个有序数组class Solution { public: void merge(vectorint nums1, int m, vectorint nums2, int n) { int cur1 m - 1, cur2 n - 1, cur m n - 1; while(cur1 0 cur2 0) { if(nums1[cur1] nums2[cur2]) nums1[cur--] nums1[cur1--]; else nums1[cur--] nums2[cur2--]; } while(cur2 0) nums1[cur--] nums2[cur2--]; } };6.The Blocks Problem#include iostream #include vector using namespace std; const int N 30; typedef pairint, int PII; int n; vectorint p[N]; // 创建 n 个放⽊块的槽 PII find(int x) { for(int i 0; i n; i) { for(int j 0; j p[i].size(); j) { if(p[i][j] x) { return {i, j}; } } } } void clean(int x, int y) { // 把 [x, y] 以上的⽊块归位 for(int j y 1; j p[x].size(); j) { int t p[x][j]; p[t].push_back(t); } p[x].resize(y 1); } void move(int x1, int y1, int x2) { // 把 [x1, y1] 及其以上的⽊块放在 x2 上⾯ for(int j y1; j p[x1].size(); j) { p[x2].push_back(p[x1][j]); } p[x1].resize(y1); } int main() { cin n; // 初始化 for(int i 0; i n; i) { p[i].push_back(i); } string op1, op2; int a, b; while(cin op1 a op2 b) { // 查找 a 和 b 的位置 PII pa find(a); int x1 pa.first, y1 pa.second; PII pb find(b); int x2 pb.first, y2 pb.second; if(x1 x2) continue; // 处理不合法的操作 if(op1 move) // 把 a 上⽅归位 { clean(x1, y1); } if(op2 onto) // 把 b 上⽅归位 { clean(x2, y2); } move(x1, y1, x2); } // 打印 for(int i 0; i n; i) { cout i :; for(int j 0; j p[i].size(); j) { cout p[i][j]; } cout endl; }