T1:
#include <bits/stdc++.h>
using namespace std;
int a[100], cnt;
int main(){
int n;
cin >> n;
if (n % 2 == 1){
cout << -1 << endl;
return 0;
}
int res = 1;
while (n != 0){
a[++cnt] = n % 2 * res;
n /= 2;
res *= 2;
}
for (int i = cnt; i >= 2; i--){
if (a[i] != 0){
cout << a[i] << ' ';
}
}
return 0;
}
T2:
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100001;
int tong[MAXN];
int main(){
int n, w;
cin >> n >> w;
for (int p = 1; p <= n; p++){
int x;
cin >> x;
tong[x]++;
int res = max(1, p * w / 100);
for (int i = 600; i >= 0; i--){
res -= tong[i];
if (res <= 0){
cout << i << ' ';
break;
}
}
}
return 0;
}
T3:
#include <iostream>
#include <cstdio>
#include <vector>
#include <cstring>
#include <stack>
using namespace std;
const int maxn = 2000007;
char s[maxn];
int TRUE[maxn];
int val[maxn];
vector<int>* vec[maxn];
int ans[maxn];
#define pr(x) cout << #x << ":" << x << endl
int main() {
freopen("expr.in", "r", stdin);
freopen("expr.out", "w", stdout);
int n;
gets(s);
cin >> n;
for(int i = 1;i <= n;++i) {
cin >> val[i];
}
int len = strlen(s);
int nb_node = 0;
stack<int> nums;
for(int i = 0;i < len; ++i) {
if(s[i] == 'x') {
++i;
int tmp = 0;
while(s[i] >= '0' && s[i] <= '9') tmp = tmp * 10 + s[i++] - '0';
vec[++nb_node] = new vector<int>();
TRUE[nb_node] = val[tmp];
vec[nb_node] -> push_back( tmp );
nums.push(nb_node);
}
else if(s[i] == '!') {
int node_idx = nums.top();nums.pop();
nb_node ++;
TRUE[nb_node] = 1 - TRUE[node_idx];
vec[nb_node] = vec[node_idx];
nums.push(nb_node);
}
else if(s[i] == '&' || s[i] == '|') {
int node_idx_b = nums.top();nums.pop();
int node_idx_a = nums.top();nums.pop();
nb_node ++;
bool a, b;
if(s[i] == '&') {
TRUE[nb_node] = TRUE[node_idx_a] & TRUE[node_idx_b];
b = (TRUE[node_idx_a] & (1 - TRUE[node_idx_b])) != TRUE[nb_node];
a = ((1 - TRUE[node_idx_a]) & TRUE[node_idx_b]) != TRUE[nb_node];
}
else {
TRUE[nb_node] = TRUE[node_idx_a] | TRUE[node_idx_b];
b = (TRUE[node_idx_a] | (1 - TRUE[node_idx_b])) != TRUE[nb_node];
a = ((1 - TRUE[node_idx_a]) | TRUE[node_idx_b]) != TRUE[nb_node];
}
if(a && b) {
vec[nb_node] = vec[node_idx_a];
for(int i = 0;i < vec[node_idx_b] -> size();++i) {
vec[nb_node] -> push_back((*vec[node_idx_b])[i]);
}
}
else if(a) vec[nb_node] = vec[node_idx_a];
else if(b) vec[nb_node] = vec[node_idx_b];
else vec[nb_node] = new vector<int>();
nums.push(nb_node);
}
}
int rt = nums.top();
for(int i = 1;i <= n;++i) {
ans[i] = TRUE[rt];
}
for(int i = 0;i < vec[rt] -> size();++i) {
ans[(*vec[rt])[i]] = 1 - TRUE[rt];
}
int m;cin >> m;
for(int i = 1;i <= m;++i) {
int x; cin >> x;
cout << ans[x] << endl;
}
return 0;
}
T4:
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1001;
long long dp[MAXN][MAXN];
long long a[MAXN][MAXN];
int main(){
int n, m;
cin >> n >> m;
for (int i = 1; i <= n; i++){
for (int j = 1; j <= m; j++){
cin >> a[i][j];
}
}
for (int j = 1; j <= m; j++){
for (int i = 1; i <= n; i++){
dp[i][j] = dp[i][j-1] + a[i][j];
}
long long res = dp[1][j-1] + a[1][j];
for (int i = 2; i <= n; i++){
dp[i][j] = max(dp[i][j], res + a[i][j]);
res = max(dp[i][j-1], res) + a[i][j];
}
res = dp[n][j-1] + a[n][j];
for (int i = n - 1; i >= 1; i--){
dp[i][j] = max(dp[i][j], res + a[i][j]);
res = max(dp[i][j-1], res) + a[i][j];
}
}
cout << dp[n][m] << endl;
return 0;
}