#include<iostream>#include<cstring>#include<algorithm>usingnamespace std;signedmain(){
string s; cin >> s;sort(s.begin(), s.end());
cout << s <<'\n';while(next_permutation(s.begin(), s.end()))
cout << s <<'\n';}
4 集合的“交”与“并”
#include<iostream>#include<cstring>#include<algorithm>#include<vector>#include<unordered_set>usingnamespace std;signedmain(){int n, m, x; cin >> n >> m;
unordered_set<int> s1, s2;
vector<int> vec1, vec2;for(int i =1; i <= n; i ++)
cin >> x, s1.insert(x);for(int i =1; i <= m; i ++)
cin >> x, s2.insert(x);for(auto x : s1)if(s2.count(x)) vec1.push_back(x);else vec2.push_back(x);for(auto x : s2) vec2.push_back(x);sort(vec1.begin(),vec1.end());sort(vec2.begin(),vec2.end());
cout << vec1.size();for(auto x : vec1) cout <<" "<< x;
cout <<'\n';
cout << vec2.size();for(auto x : vec2) cout <<" "<< x;}
#include<iostream>#include<cstring>#include<algorithm>#include<unordered_map>usingnamespace std;
string post, in, pre ="";
unordered_map<char,int>pos;voiddfs(int il,int ir,int pl,int pr){if(pl > pr)return;int k = pos[post[pr]];
pre += post[pr];dfs(il, k -1, pl, pl + k -1- il);dfs(k +1, ir, pl + k -1- il +1, pr -1);}signedmain(){int n; cin >> n;
cin >> post >> in;for(int i =0; i < n; i ++) pos[in[i]]= i;dfs(0, n -1,0, n -1);
cout << pre <<'\n';}
8 找第 k 小的数
#include<iostream>usingnamespace std;constint N =100010;int a[N];intfind(int l,int r,int k){if(l >= r)return a[l];int i = l -1, j = r +1, v = a[l + r >>1];while(i < j){do i ++;while(a[i]< v);do j --;while(a[j]> v);if(i < j)swap(a[i], a[j]);}if(j - l +1>= k)returnfind(l, j, k);elsereturnfind(j +1, r, k -(j - l +1));}signedmain(){int n, k; cin >> n >> k;for(int i =0; i < n; i ++) cin >> a[i];
cout <<find(0, n -1, k)<<'\n';}
9 求逆序对数目
#include<iostream>usingnamespace std;#defineintlonglongconstint N =100010;int a[N], tmp[N];int res =0;voidmerge(int l,int r){if(l >= r)return;int mid = l + r >>1;merge(l, mid);merge(mid +1, r);int i = l, j = mid +1, k =0;while(i <= mid && j <= r){if(a[i]<= a[j]) tmp[k ++]= a[i ++];else{
res += mid - i +1;
tmp[k ++]= a[j ++];}}while(i <= mid) tmp[k ++]= a[i ++];while(j <= r) tmp[k ++]= a[j ++];for(int i = l, k =0; i <= r; i ++, k ++) a[i]= tmp[k];}signedmain(){int n; cin >> n;for(int i =0; i < n; i ++) cin >> a[i];merge(0, n -1);
cout << res <<'\n';}