From 4fb16451ffd9ac9cb6054a07d1cd8fef71b2b7db Mon Sep 17 00:00:00 2001 From: liuchuo <95323362@qq.com> Date: Wed, 14 Nov 2018 15:45:58 +0800 Subject: [PATCH] :bug: bug: fix bugs --- .../1020. Tree Traversals (25).cpp | 35 ++++--- .../1056. Mice and Rice (25).cpp | 97 ++++++++++--------- ...0\272\253\344\273\275\350\257\201(15).cpp" | 22 ++--- 3 files changed, 83 insertions(+), 71 deletions(-) diff --git a/AdvancedLevel_C++/1020. Tree Traversals (25).cpp b/AdvancedLevel_C++/1020. Tree Traversals (25).cpp index 3de43b5..65bcab2 100644 --- a/AdvancedLevel_C++/1020. Tree Traversals (25).cpp +++ b/AdvancedLevel_C++/1020. Tree Traversals (25).cpp @@ -1,30 +1,35 @@ #include +#include #include using namespace std; -vector post, in, level(100000, -1); +struct node { + int index, value; +}; +bool cmp(node a, node b) { + return a.index < b.index; +} +vector post, in; +vector ans; void pre(int root, int start, int end, int index) { - if(start > end) return ; + if (start > end) return; int i = start; - while(i < end && in[i] != post[root]) i++; - level[index] = post[root]; + while (i < end && in[i] != post[root]) i++; + ans.push_back({index, post[root]}); pre(root - 1 - end + i, start, i - 1, 2 * index + 1); pre(root - 1, i + 1, end, 2 * index + 2); } int main() { - int n, cnt = 0; + int n; scanf("%d", &n); post.resize(n); in.resize(n); - for(int i = 0; i < n; i++) scanf("%d", &post[i]); - for(int i = 0; i < n; i++) scanf("%d", &in[i]); - pre(n-1, 0, n-1, 0); - for(int i = 0; i < level.size(); i++) { - if (level[i] != -1) { - if (cnt != 0) printf(" "); - printf("%d", level[i]); - cnt++; - } - if (cnt == n) break; + for (int i = 0; i < n; i++) scanf("%d", &post[i]); + for (int i = 0; i < n; i++) scanf("%d", &in[i]); + pre(n - 1, 0, n - 1, 0); + sort(ans.begin(), ans.end(), cmp); + for (int i = 0; i < ans.size(); i++) { + if (i != 0) cout << " "; + cout << ans[i].value; } return 0; } \ No newline at end of file diff --git a/AdvancedLevel_C++/1056. Mice and Rice (25).cpp b/AdvancedLevel_C++/1056. Mice and Rice (25).cpp index b7ee4bc..b986cd5 100644 --- a/AdvancedLevel_C++/1056. Mice and Rice (25).cpp +++ b/AdvancedLevel_C++/1056. Mice and Rice (25).cpp @@ -1,55 +1,62 @@ #include -#include -#define lowbit(i) ((i) & (-i)) -const int maxn = 100010; +#include +#include +#include using namespace std; -int c[maxn]; -stack s; -void update(int x, int v) { - for(int i = x; i < maxn; i += lowbit(i)) - c[i] += v; -} -int getsum(int x) { - int sum = 0; - for(int i = x; i >= 1; i -= lowbit(i)) - sum += c[i]; - return sum; -} -void PeekMedian() { - int left = 1, right = maxn, mid, k = (s.size() + 1) / 2; - while(left < right) { - mid = (left + right) / 2; - if(getsum(mid) >= k) - right = mid; - else - left = mid + 1; - } - printf("%d\n", left); +struct node { + int weight, index, rank, index0; +}; +bool cmp1(node a, node b) { + return a.index0 < b.index0; } int main() { - int n, temp; - scanf("%d", &n); - char str[15]; + int n, g, num; + scanf("%d%d", &n, &g); + vector v(n); + vector w(n); + for(int i = 0; i < n; i++) + scanf("%d", &v[i]); for(int i = 0; i < n; i++) { - scanf("%s", str); - if(str[1] == 'u') { - scanf("%d", &temp); - s.push(temp); - update(temp, 1); - } else if(str[1] == 'o') { - if(!s.empty()) { - update(s.top(), -1); - printf("%d\n", s.top()); - s.pop(); - } else { - printf("Invalid\n"); + scanf("%d", &num); + w[i].weight = v[num]; + w[i].index = i; + w[i].index0 = num; + } + queue q; + for(int i = 0; i < n; i++) + q.push(w[i]); + while(!q.empty()) { + int size = q.size(); + if(size == 1) { + node temp = q.front(); + w[temp.index].rank = 1; + break; + } + int group = size / g; + if(size % g != 0) + group += 1; + node maxnode; + int maxn = -1, cnt = 0; + for(int i = 0; i < size; i++) { + node temp = q.front(); + w[temp.index].rank = group + 1; + q.pop(); + cnt++; + if(temp.weight > maxn) { + maxn = temp.weight; + maxnode = temp; + } + if(cnt == g || i == size - 1) { + cnt = 0; + maxn = -1; + q.push(maxnode); } - } else { - if(!s.empty()) - PeekMedian(); - else - printf("Invalid\n"); } } + sort(w.begin(), w.end(), cmp1); + for(int i = 0; i < n; i++) { + if(i != 0) printf(" "); + printf("%d", w[i].rank); + } return 0; } \ No newline at end of file diff --git "a/BasicLevel_C++/1031. \346\237\245\351\252\214\350\272\253\344\273\275\350\257\201(15).cpp" "b/BasicLevel_C++/1031. \346\237\245\351\252\214\350\272\253\344\273\275\350\257\201(15).cpp" index 852164d..41d710b 100644 --- "a/BasicLevel_C++/1031. \346\237\245\351\252\214\350\272\253\344\273\275\350\257\201(15).cpp" +++ "b/BasicLevel_C++/1031. \346\237\245\351\252\214\350\272\253\344\273\275\350\257\201(15).cpp" @@ -15,23 +15,23 @@ int main() { } bool func(string s) { int sum = 0, a[18]; - for (int i = 0; i < 17; i++) - a[i] = s[i] - '0'; - if (s[17] == 'X') a[17] = 10; - else - a[17] = s[17] - '0'; + for (int i = 0; i < 17; i++) { + if (s[i] >= '0' && s[i] <= '9') { + a[i] = s[i] - '0'; + } else { + cout << s << endl; + return true; + break; + } + } + a[17] = (s[17] == 'X') ? 10 : (s[17] - '0'); int b[17] = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2}; for (int i = 0; i < 17; i++) sum = sum + a[i] * b[i]; sum = sum % 11; int c[11] = {1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2}; if (c[sum] != a[17]) { - for (int i = 0; i < 17; i++) - cout << s[i]; - if (a[17] != 10) - cout << a[17] << endl; - else - cout << "X" << endl; + cout << s << endl; return true; } return false;