zoukankan      html  css  js  c++  java
  • Deltix Round, Spring 2021 (open for everyone, rated, Div. 1 + Div. 2) (ABCE补题记录)

    补题链接:Here

    1523A. Game of Life

    生命游戏定义

    本题中改编为一维坐标上的生命游戏


    即使 (m(min[1,1e9])) 的范围很大,但每次进化不会超过 (n) 次,因为如果我们进化结果与上一代是相同的则说明游戏结束了,但我们只有 (n) 格。所以最多进行 (n) 次进化迭代

    所以我们可以直接模拟进化过程

    时间复杂度:(mathcal{O}(n^2))

    void solve() {
        int n; ll m;
        string s;
        cin >> n >> m >> s;
        s = "0" + s + "0";
        while (m--) {
            string t = s;
            for (int i = 1; i <= n; ++i)
                t[i] |= s[i - 1] ^ s[i + 1];
            if (t == s)break;
            s = t;
        }
        cout << s.substr(1, n) << "
    ";
    }
    

    1523B. Lord of the Values

    现有两种操作:选定两个元素((i ot=j in(1,n)) ) ,(nle10^3) 并且 (n) 为偶数

    1. (a_i = a_i + a_j)
    2. (a_j=a_j-a_i)

    现在希望执行最多 (5000) 次操作使得 ([a_1,a_2,...,a_n] o [-a_1,-a_2,...,-a_n])


    这里读者可以手写模拟一下,要将任何一对数字 ((a,b)) 转换为一对 ((-a,-b)) ,可以执行一系列操作,例如 ((1,2,1,2,1,2)),同时 (n) 为偶数,所以我们可以直接对 ((1,n)) 的元素如上操作

    时间复杂度:(mathcal{O}(n))

    using ll = long long;
    void solve() {
        int n; cin >> n;
        vector<ll>a(n + 1);
        for (int i = 1; i <= n; ++i)cin >> a[i];// 这里可以不用存,伪读入即可
        cout << n * 3 << '
    ';
        for (int i = 1; i <= n; i += 2) {
            cout << "1 " << i << " " << i + 1 << '
    ';
            cout << "2 " << i << " " << i + 1 << '
    ';
            cout << "1 " << i << " " << i + 1 << '
    ';
            cout << "2 " << i << " " << i + 1 << '
    ';
            cout << "1 " << i << " " << i + 1 << '
    ';
            cout << "2 " << i << " " << i + 1 << '
    ';
        }
    }
    

    1523C. Compression and Expansion

    有一个任务表,其中任务里也会嵌套任务,现在由于某些原因任务表出现问题,需要由我们恢复


    这道题需要用 STL 构建堆栈。

    在堆栈中维护列表的当前深度。 最初堆栈是空的。 对于每个新的 (a_i),有两个选项:

    • (a_i = 1): 我们只需将给定的数字添加到堆栈的末尾,它将指向列表中的一个新子项。
    • (a_i>1): 我们需要找到子项,它的最后一个数字将比 (a_i) 小 1。 为此,我们将从堆栈中删除最后一个元素,直到找到这个数字。

    在每次迭代结束后,我们将打印结果堆栈作为列表中的新项目。 请注意,由于输出整个列表,复杂度将是二次的。

    时间复杂度:(mathcal{O}(n^2))

    void solve() {
        int n; cin >> n;
        vector<int>a;
        for (int i = 0, x; i < n; ++i) {
            cin >> x;
            if (x > 1) {
                while (!a.empty() && a.back() + 1 != x)
                    a.pop_back();
                assert(!a.empty());
                a.pop_back();
            }
            a.push_back(x);
            for (int j = 0; j < (int) a.size(); j++) {
                if (j > 0) {
                    cout << ".";
                }
                cout << a[j];
            }
            cout << '
    ';
        }
    }
    

    1523E. Crypto Lights

    【题意待补】


    using ll = long long;
    const int N = 1e5 + 10, P = 1e9 + 7;
    ll n, k, ans, fac[N], inv[N];
    ll qpow(ll a, ll b) {
        ll ans = 1;
        for (; b; b >>= 1, a = a * a % P)
            if (b & 1) ans = ans * a % P;
        return ans;
    }
    void initC() {
        fac[0] = 1;
        for (int i = 1; i <= n; i++) fac[i] = fac[i - 1] * i % P;
        inv[n] = qpow(fac[n], P - 2);
        for (int i = n; i >= 1; i--) inv[i - 1] = inv[i] * i % P;
    }
    ll C(ll n, ll m) {
        if (n < m) return 0;
        return fac[n] * inv[m] % P * inv[n - m] % P;
    }
    void solve() {
        cin >> n >> k;
        initC();
        ans = 1;
        for (int i = 1; (i - 1) * (k - 1) <= n; ++i)
            ans = (ans + C(n - (i - 1) * (k - 1), i) * qpow(C(n, i), P - 2) % P) % P;
        cout << ans << "
    ";
    }
    

    The desire of his soul is the prophecy of his fate
    你灵魂的欲望,是你命运的先知。

  • 相关阅读:
    【项目】 技术选型 平台和语言
    WCF 常见逻辑和代码 1.错误处理和配置
    一个挺有意思的Javascript小问题
    【设计原则和建议】 方法返回值
    一次HTTP请求中的缓存
    【设计原则和建议】 方法
    【设计原则和建议】 字段
    Express全系列教程之(一):Express的安装 和第一个程序
    js switch语句祥解[范围判断]
    修改notepad++ zencodeing 插件的配置路径
  • 原文地址:https://www.cnblogs.com/RioTian/p/14836006.html
Copyright © 2011-2022 走看看