zufe 蓝桥选拔

https://zufeoj.com/contest.php?cid=1483

 

问题 A: A

代码:

#include <bits/stdc++.h>
using namespace std;

const int maxn = 1e5 + 10;
int n;
int num[maxn];
map<int, int> mp;

int main() {
    scanf("%d", &n);
    for(int i = 0; i < n; i ++) {
        scanf("%d", &num[i]);
        mp[num[i]] ++;
    }

    sort(num, num + n);
    int maxx = num[n - 1];
    for(int i = 0; i <= maxx; i ++)
        printf("%d\n", mp[i]);
    return 0;
}
View Code

问题 B: 平方数(sevensqr)

代码:

#include <bits/stdc++.h>
using namespace std;

bool is(int x) {
    vector<int> num;
    int t = x;
    while(t) {
        num.push_back(t % 10);
        t /= 10;
    }

    map<int, int> mp;
    for(int i = 0; i < num.size(); i ++) {
        mp[num[i]] ++;
        if(mp[num[i]] > 1) return false;
    }
    return true;
}

int main() {
    vector<int> ans;
    for(int i = 1000000; i < 10000000; i ++) {
        if((int)sqrt(i) == sqrt(i) && is(i))
            ans.push_back(i);
    }

    int cnt = 0;
    for(int i = 0; i < ans.size(); i ++) {
        cnt ++;
        printf("%d ", ans[i]);
        printf("%s", (cnt % 10 == 0) ? "\n" : "");
    }

    return 0;
}
View Code

问题 C: 打印图形

 代码:

#include <bits/stdc++.h>
using namespace std;

int T;
char mp[1010][1010];

int main() {
    scanf("%d", &T);
    while(T --) {
        int n;
        scanf("%d", &n);
        for(int i = 1; i <= n; i ++) {
            for(int j = 1; j <= n; j ++) {
                if(i == j) mp[i][j] = '*';
                else if(i == 1 || i == n)
                    mp[i][j] = '*';
                else if(j == 1 || j == n)
                    mp[i][j] = '*';
                else mp[i][j] = '.';
            }
        }

        for(int i = 1; i <= n; i ++) {
            for(int j = 1; j <= n; j ++)
                printf("%c", mp[i][j]);
            printf("\n");
        }
    }
    return 0;
}
View Code

问题 D: 借书

 代码:

#include <bits/stdc++.h>
using namespace std;

int T;
int n, m, w;
int book[100];

int main() {
    scanf("%d", &T);
    while(T --) {
        scanf("%d", &n);
        for(int i = 1; i <= n; i ++)
            scanf("%d", &book[i]);
        scanf("%d", &m);
        while(m --) {
            int x;
            scanf("%d", &x);
            if(x > 0) book[x] --;
            else book[abs(x)] ++;
        }
        scanf("%d", &w);
        if(book[w] > 1)
            printf("yes\n");
        else printf("no\n");
    }
    return 0;
}
View Code

问题 E: 九宫

 代码:

#include <bits/stdc++.h>
using namespace std;

int T;
int maze[10][10];

int main() {
    scanf("%d", &T);
    for(int y = 1; y <= T; y ++) {
        memset(maze, 0, sizeof(maze));
        for(int i = 0; i < 9; i ++)
            for(int j = 0; j < 9; j ++)
                scanf("%d", &maze[i][j]);

        map<int, int> mp;
        bool flag = true;
        for(int i = 0; i < 9; i ++) {
            for(int j = 0; j < 0; j ++) {
                mp[maze[i][j]] ++;
                if(mp[maze[i][j]] > 1) {
                    flag = false;
                    //printf("Wrong\n");
                    break;
                }
            }
            mp.clear();
        }

        for(int i = 0; i < 9; i ++) {
            for(int j = 0; j < 9; j ++) {
                mp[maze[j][i]] ++;
                if(mp[maze[j][i]] > 1) {
                    flag = false;
                    //printf("Wrong\n");
                    break;
                }
            }
            mp.clear();
        }

        for(int i = 0; i < 9; i += 3) {
            for(int j = 0; j < 9; j += 3) {
                for(int s = i; s < i + 3; s ++) {
                    for(int t = j; t < j + 3; t ++) {
                        mp[maze[s][t]] ++;
                        if(mp[maze[s][t]] > 1) {
                            flag = false;
                            //printf("Wrong\n");
                            break;
                        }
                    }
                }
                mp.clear();
            }
        }
        if(flag) printf("Right\n");
        else printf("Wrong\n");
    }
    return 0;
}
View Code

问题 F: 捡石头

 代码:

#include <bits/stdc++.h>
using namespace std;

int T;

int main() {
    scanf("%d", &T);
    while(T --) {
        int n;
        scanf("%d", &n);
        int win = 1;
        if(n % 8 == 0)
            win = 0;

        if(win) printf("金\n");
        else printf("勇\n");
    }
    return 0;
}
View Code

问题 G: 竞赛真理

 代码:

#include <bits/stdc++.h>
using namespace std;

int n, t;
int w1[50], w2[50], t1[50], t2[50];
int dp[33][1080010];

int main() {
    scanf("%d%d", &n, &t);
    for(int i = 0; i < n; i ++)
        scanf("%d%d%d%d", &w1[i], &t1[i], &w2[i], &t2[i]);

    for(int i = n - 1; i >= 0; i --) {
        for(int j = 0; j <= t; j ++) {
            if(j < t1[i] && j < t2[i])
                dp[i][j] = dp[i + 1][j];
            else if(j < t1[i] && j >= t2[i])
                dp[i][j] = max(dp[i + 1][j], dp[i + 1][j - t2[i]] + w2[i]);
            else if(j >= t1[i] && j < t2[i])
                dp[i][j] = max(dp[i + 1][j], dp[i + 1][j - t1[i]] + w1[i]);
            else
                dp[i][j] = max(dp[i + 1][j], max(dp[i + 1][j - t1[i]] + w1[i], dp[i + 1][j - t2[i]] + w2[i]));
        }
    }

    int ans = dp[0][t];
    printf("%d\n", ans);
    return 0;
}
View Code

问题 H: 吃西瓜

 代码:

#include <stdio.h>
#include <string.h>
#define max(a, b) (a)>(b)?(a):(b)
#define INF 0x3f3f3f3f3f3f3f
const int N = 25;

int t, A, B, C;
long long g[33][51][51], sum[51][51][51][51], res[51][51][51][51];

void init() {
    scanf("%d%d%d", &A, &B, &C);
    for (int i = 1; i <= A; i++)
        for (int j = 1; j <= B; j++)
            for (int k = 1; k <= C; k++)
                scanf("%lld", &g[i][j][k]);
}

long long solve() {
    long long ans = -INF;
    for (int c = 1; c <= A; c++) {
        for (int i = 1; i <= B; i++) {
            for (int j = i; j <= B; j++) {
                for (int k = 1; k <= C; k++) {
                    long long h = 0;
                    for (int l = k; l <= C; l++) {
                        h += g[c][j][l];
                        sum[i][j][k][l] = sum[i][j - 1][k][l] + h;
                        if (c == 1) res[i][j][k][l] = sum[i][j][k][l];
                        else res[i][j][k][l] = max(sum[i][j][k][l], res[i][j][k][l] + sum[i][j][k][l]);
                        ans = max(ans, res[i][j][k][l]);
                    }
                }
            }
        }
    }
    return ans;
}

int main() {
    //scanf("%d", &t);
    //while (t--) {
        init();
        printf("%lld\n", solve());
        if (t) printf("\n");
    //}
    return 0;
}
View Code

附加:二维数组的最大子矩阵和

   代码:

#include <bits/stdc++.h>
using namespace std;

int n, m;

int MaxSum(vector<vector<int> >& a) {
    int cur = 0;
    int maxx = INT_MIN;
    for(int i = 0; i < a.size(); i ++) {
        vector<int> s(a[0].size());
        for(int j = i; j < a.size(); j ++) {
            cur = 0;
            for(int k = 0; k < s.size(); k ++) {
                s[k] += a[j][k];
                cur += s[k];
                maxx = max(maxx, cur);
                cur = max(cur, 0);
            }
        }
    }

    return maxx;
}

int main() {
    scanf("%d%d", &n, &m);
    vector<vector<int> > v(n, vector<int>(m));
    for(int i = 0; i < n; i ++) {
       for(int j = 0; j < m; j ++)
            scanf("%d", &v[i][j]);
    }

    int ans = MaxSum(v);
    printf("%d\n", ans);
    return 0;
}
View Code

第一次参加的比赛 超级紧脏 还是要好好学呢

posted @ 2018-12-05 22:53  丧心病狂工科女  阅读(221)  评论(0编辑  收藏  举报