Skip to content

Commit

Permalink
🐛 bug: fix bugs
Browse files Browse the repository at this point in the history
  • Loading branch information
liuchuo committed Nov 14, 2018
1 parent 601d0e8 commit 4fb1645
Show file tree
Hide file tree
Showing 3 changed files with 83 additions and 71 deletions.
35 changes: 20 additions & 15 deletions AdvancedLevel_C++/1020. Tree Traversals (25).cpp
Original file line number Diff line number Diff line change
@@ -1,30 +1,35 @@
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
vector<int> post, in, level(100000, -1);
struct node {
int index, value;
};
bool cmp(node a, node b) {
return a.index < b.index;
}
vector<int> post, in;
vector<node> 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;
}
97 changes: 52 additions & 45 deletions AdvancedLevel_C++/1056. Mice and Rice (25).cpp
Original file line number Diff line number Diff line change
@@ -1,55 +1,62 @@
#include <iostream>
#include <stack>
#define lowbit(i) ((i) & (-i))
const int maxn = 100010;
#include <queue>
#include <vector>
#include <algorithm>
using namespace std;
int c[maxn];
stack<int> 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<int> v(n);
vector<node> 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<node> 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;
}
22 changes: 11 additions & 11 deletions BasicLevel_C++/1031. 查验身份证(15).cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down

0 comments on commit 4fb1645

Please sign in to comment.