1 早上
1 洛谷题 (2h)
#include<stdio.h> //using namespace std; int n,a[1000001]; void fast(int l,int r) { int mid = a[(l + r) / 2]; int i = l,j = r; do{ while(a[i] < mid) i ++; while(a[j] > mid) j --; if(i <= j) { //swap(a[i],a[j]); int t = a[i]; a[i] = a[j]; a[j] = t; i ++; j --; } }while(i <= j); if(l < j) fast(l,j); if(i < r) fast(i,r); } int main() { //cin >> n; scanf ("%d",&n); for(int i = 1;i <= n;i ++) scanf ("%d",&a[i]); fast(1,n); for(int i = 1;i <= n;i ++) printf ("%d ",a[i]); }
因时间拆限制,so用二分法的思想
二 下午
1 看大话数据结构 了解了二叉树(1h)
2 洛谷题 美国总统(2h)
#include <bits/stdc++.h> using namespace std; void fun (string pre,string in) { if (in.size() > 0){ char root = pre[0]; int a = in.find(root); //在字符串s中查找第一个字符的位置,返回下标 //cout << a << endl; pre.erase(pre.begin()); 在字符串中删除指针()所指向的字符 fun (pre.substr(0,a),in.substr(0,a)); //切割 fun (pre.substr(a),in.substr(a + 1)); cout << root; } } int main () { string in, pre; cin >> in >> pre; fun (pre,in); return 0; }
3 洛谷题 (2h)
#include <bits/stdc++.h> using namespace std; void fun (string in,string post) { if (in.size() > 0){ char a = post[post.size() - 1]; cout << a; int b = in.find(a); //找到a所在的位置 fun (in.substr(0,b),post.substr(0,b)); //substr 切割 递归左子树 fun (in.substr(b + 1),post.substr(b,in.size() - b - 1)); //递归右子树 } } int main () { string in; string post; cin >> in >> post; fun (in,post); return 0; }