zoukankan      html  css  js  c++  java
  • Codeforces Round #690 (Div. 3)

    Codeforces Round #690 (Div. 3)

    A - Favorite Sequence

    按着题意读入, 顺序输出完事

    int main() {
        IOS;
        for (cin >> _; _; --_) {
            cin >> n;
            rep (i, 1, n) {
                if (i <= (n + 1 >> 1)) cin >> a[i * 2 - 1];
                else cin >> a[n - i + 1 << 1];
            }
            rep (i, 1, n) cout << a[i] << ' '; cout << '
    ';
        }
        return 0;
    }
    

    B - Last Year's Substring

    模拟, 比A麻烦

    int main() {
        IOS;
        for (cin >> _; _; --_) {
            cin >> n >> s + 1;
            bool f = 0;
            if (s[1] == '2' && s[2] == '0' && s[3] == '2' && s[4] == '0') f = 1;
            else if (s[n - 3] == '2' && s[n - 2] == '0' && s[n - 1] == '2' && s[n] == '0') f = 1;
            else if (s[1] == '2' && s[2] == '0' && s[3] == '2' && s[n] == '0') f = 1;
            else if (s[1] == '2' && s[2] == '0' && s[n - 1] == '2' && s[n] == '0') f = 1;
            else if (s[1] == '2' && s[n - 2] == '0' && s[n - 1] == '2' && s[n] == '0') f = 1;
            cout << (f ? "YES
    " : "NO
    ");
        }
        return 0;
    }
    

    C - Unique Number

    就9个数, 肯定不用0, 从9各位, 开始放就完事

    int main() {
        IOS;
        for (cin >> _; _; --_) {
            cin >> n; int i;
            for (i = 1; i <= 9 && n; ++i) a[i] = min(n, 10 - i), n -= a[i];
            if (i == 1 || n)  cout << "-1";
            else while (--i) cout << a[i]; cout << '
    ';
        }
        return 0;
    }
    

    D - Add to Neighbour and Remove

    无非是把序列分段, 每段的和一样, 直接枚举每段的首尾dp完事, 用unordered_map判断是否能转移

    复杂度 (O(n^2)) 有个unordered_map的常数, 这次最喜欢的一道题

    int main() {
        IOS;
        for (cin >> _; _; --_) {
            cin >> n; unordered_map<int, int> st[n + 1];
            rep (i, 1, n) {
                cin >> a[i]; a[i] += a[i - 1]; st[i][a[i]] = i - 1;
                rep (j, 1, i - 1) if (st[j].count(a[i] - a[j])) st[i][a[i] - a[j]] = st[j][a[i] - a[j]] + i - j - 1;
            }
            int ans = n - 1;
            for (auto &i : st[n]) umin(ans, i.se);
            cout << ans << '
    ';
        }
        return 0;
    }
    

    E1&E2 - Close Tuples

    组合数学

    这里只放E2的代码了, E1无非是m,k给定, 不取膜(C用平常约分的方式计算)

    int C(int n, int m) {
        if (n < m) return 0;
        return fac[n] * facinv[m] % mod * facinv[n - m] % mod;
    }
     
    int main() {
        IOS; inv[0] = inv[1] = fac[0] = facinv[0] = 1;
        rep (i, 2, 2e5) inv[i] = (mod - mod / i) * inv[mod % i] % mod;
        rep (i, 1, 2e5) fac[i] = fac[i - 1] * i % mod, facinv[i] = facinv[i - 1] * inv[i] % mod; 
        for (cin >> _; _; --_) {
            cin >> n >> m >> k;
            rep (i, 1, n) cin >> a[i];
            sort(a + 1, a + 1 + n);
            ll ans = 0;
            for (int i = 1, j = 1; i <= n; ++i) {
                while(a[i] - a[j] > k) ++j;
                ans = (ans + C(i - j, m - 1)) % mod;
            }  
            cout << ans << '
    ';
        }
        return 0;
    }
    

    F - The Treasure of The Segments

    无非就是不相交, 右节点再当前段左节点左边, 左节点再当前段右节点右边 一定不相交

    二分找一下就行, 正难则反

    int main() {
        IOS;
        for (cin >> _; _; --_) {
            cin >> n; VI l(n), r(n);
            rep (i, 1, n) cin >> a[i].fi >> a[i].se, l.pb(a[i].fi), r.pb(a[i].se);
            sort(all(l)); sort(all(r)); 
            int ans = n - 1;
            rep (i, 1, n) umin(ans, lower_bound(all(r), a[i].fi) - r.begin() + n - (upper_bound(all(l), a[i].se) - l.begin()));
            cout << ans << '
    ';
        }
        return 0;
    }
    
  • 相关阅读:
    SQL SERVER常用取重复记录的SQL语句
    订单号生成
    SQL Server 2005中返回修改后的数据
    一条sql语句,要修改一个字段的俩个值,比如把字段sex中的男改为女,女改为男
    C#输入法全半角转换
    dataGridView1 筛选
    C#(WIN FORM)两个窗体间LISTVIEW值的修改
    ms sql server 2005数据库日志文件过大,需要清除或者清空
    SQL 判断表是否存在
    C#将数据写入记事本并且从记事本中读出
  • 原文地址:https://www.cnblogs.com/2aptx4869/p/14143286.html
Copyright © 2011-2022 走看看