zoukankan      html  css  js  c++  java
  • 「csp模拟」模拟测试2

    • 问题还是不少, 一直在改T1在考试时竟没有去想T2的暴力, 这道题的暴力人均二十分啊,我却没有写,时间分配有问题吧,T1 30分中间分,T3 也没有别人的暴力分足。
      感觉现在就是拼暴力,谁考虑的周到,谁细节处理的好就能拿高分,好好练习吧,平常做题目时也要从暴力开始,像考试对待题目那样对待平时的练习,暴力该写就写,对拍也不能少,加油吧!

    星际旅行

    题目描述

    样例

    题解

    • 题中很特殊的给出,恰好 (2) 条边 (1) 次经过,(m-2) 条边 (2) 次经过,大概可以想到用欧拉路。
    • 将每条边拆为两条,问题转化为删去两条不同的边,使图中存在欧拉路。
    • 判断每个点的度数即可,在每个边拆为两条之后,每个点的度一定是偶数。
    • 分类讨论即可:
      • 删去一个自环,奇偶性不发生任何改变。
      • 删去一条普通边,所连的两个点奇偶性发生改变。
    • 现在所要求的是,存在两个点度为奇数 或 所有点度均为偶数,且要保证一个边不能被删除两次。
    • 所有的方案是:
      • 删去一个点所对应的两条边
      • 删去一个自环,再随便删一条边
      • 删去两个自环

    code

    #include <bits/stdc++.h>
    using namespace std;
    #define print(x) cerr << #x << " : " << x << endl;
    inline int read() {
        int k = 0, f = 1; char ch = getchar();
        for (; !isdigit(ch); ch = getchar()) if(ch == '-') f = -1;
        for (; isdigit(ch); ch = getchar()) k = k * 10 + ch - '0';
        return k * f;
    }
    const int maxn = 4e5 + 100;
    struct edge { int from, to; } e[maxn];
    int vis[maxn];
    vector<int> g[maxn];
    void dfs(int u) {
        for (int i = 0; i < g[u].size(); i++) {
            int v = g[u][i];
            if (vis[v]) continue;
            vis[v]++;
            dfs(v);
        }
    }
    int mark[maxn];
    int d[maxn];
    int main() {
    #ifndef debug
        freopen("tour.in", "r", stdin);
        freopen("tour.out", "w", stdout);
    #endif
        int n = read(), m = read();
        for (int i = 1; i <= m; i++) {
            e[i].from = read();
            e[i].to = read();
            d[e[i].from]++;
            d[e[i].to]++;
            g[e[i].from].push_back(e[i].to);
            g[e[i].to].push_back(e[i].from);
        }
        vis[e[1].from] = 1;
        dfs(e[1].from);
        for (int i = 1; i <= m; i++) 
            if (vis[e[i].from] == 0 && vis[e[i].to] == 0) 
                return cout << 0 << endl, 0;
        int cnt = 0;
        long long ans = 0;
        for (int i = 1; i <= m; i++) {
            if (e[i].from == e[i].to) {
                mark[i] = 1;
                d[e[i].from] -= 2;
                cnt++;
                ans += m - cnt;
            }
        }
        for (int i = 1; i <= m; i++) {
            if (mark[i]) continue;
            d[e[i].from]--;
            d[e[i].to]--;
            ans += d[e[i].from] + d[e[i].to];
        }
        cout << ans << endl;
    }
    

    matrix

    题目描述

    code

    #include <bits/stdc++.h>
    using namespace std;
    inline int read() {
        int k = 0, f = 1; char ch = getchar();
        for(; !isdigit(ch); ch = getchar()) if(ch == '-') f = -1;
        for(; isdigit(ch); ch = getchar()) k = k * 10 + ch - '0';
        return k * f;
    }
    #define int long long
    const int maxn = 3000 + 100;
    const int mod = 998244353;
    int n, m;
    int f[maxn][maxn], totl[maxn], totr[maxn];
    int A(int n, int m) {
        int ans = 1;
        for (int i = 1; i <= n; i++) ans *= i;
        for (int i = 1; i <= (n - m); i++) ans /= i;
        return ans;
    }
    signed main() {
    #ifndef debug
        freopen("matrix.in", "r", stdin);
        freopen("matrix.out", "w", stdout);
    #endif
        n = read(), m = read();
        for (int i = 1; i <= n; i++) {
            int l, r;
            scanf("%lld%lld", &l, &r);
            totl[l]++, totr[r]++;
        }
        for (int i = 1; i <= m; i++) {
            totl[i] += totl[i - 1];
            totr[i] += totr[i - 1];
        }
        f[0][0] = 1;
        for (int i = 1; i <= m; i++) {
            for (int j = 0; j <= i; j++) 
                f[i][j] = (f[i - 1][j - 1] * (totr[i] - j + 1) % mod * A(i - totl[i - 1] - j, totl[i] - totl[i - 1]) % mod + 
                    f[i - 1][j] * A(i - totl[i - 1] - j, totl[i] - totl[i - 1]) % mod) % mod;
        }
        cout << f[m][n] << endl;
    }
    

    走迷宫

    题目描述

    题解

    coding

  • 相关阅读:
    UOJ299 游戏
    SPOJ-DivCnt2 Counting Divisors (square)
    Gym102331B Bitwise Xor
    POJ3495 Bitwise XOR of Arithmetic Progression
    LG5325 【模板】Min_25筛
    LOJ6229 这是一道简单的数学题
    BZOJ3601 一个人的数论
    LOJ138 类欧几里得算法
    Atcoder TypicalDPContest N~T
    莫队基础题
  • 原文地址:https://www.cnblogs.com/hellohhy/p/13728481.html
Copyright © 2011-2022 走看看