CSP-J T1 T2 T3 T4标程
  • 板块灌水区
  • 楼主Trollz
  • 当前回复4
  • 已保存回复4
  • 发布时间2020/11/7 22:16
  • 上次更新2023/11/5 08:33:42
查看原帖
CSP-J T1 T2 T3 T4标程
360591
Trollz楼主2020/11/7 22:16

T1: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;
}

T2T2

#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;
}

T3T3

#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;
}

T4T4

#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;
}

2020/11/7 22:16
加载中...