zoukankan      html  css  js  c++  java
  • 300iq Contest 1 C Cool Pairs

    为了构造时恰好取到 (k) 对时的方便,可以考虑将 (a) 设为互不相同的 (n) 个数,这样对每个 (b) 的取值对答案的贡献就是可以通过调整变成任意值的。

    因为要尽可能造成贡献,因此我们先简单地将 (a) 设置成 (-n sim -1) 中的每一个数。

    那么此时将目光回到 (b) 上来,你会发现任意一个 (b_{q_i}) 对答案的贡献都可以通过调整取到 ([0, q_i)) 中的任意一个数。

    同时因为 (b) 中是有大小关系的,因此可以考虑按照这个大小关系来赋值,这样就可以满足题目的要求了。

    那么如果当前的 (k > q_i - 1),为了尽可能不给后面留负担,我们要把所有能匹配的数都匹配完;同时为了给后面更大的取值范围,我们将这个数设置为 (-n) 即可满足上述两个要求。

    那么对于 (k le q_i - 1) 的情况,因为之前的每个数都是取的 (-n),因此此时这个位置是能取任意一个数的。

    因为 (a) 中每个数都是互不相同的,因此通过调整一定能找到一个恰好贡献为 (k) 的位置;那么对于后面的所有数,直接填 (n) 即可不造成任何贡献。

    不难证明这个过程是可以构造出 (k in [0, sum q_i - 1 = frac{n(n - 1)}{2}]) 的任意一组解的,复杂度 (O(n log n))

    #include <bits/stdc++.h>
    using namespace std;
    #define int long long
    #define rep(i, l, r) for (int i = l; i <= r; ++i)
    const int N = 300000 + 5;
    int n, k, p[N], q[N], a[N], b[N], c[N];
    int read() {
        char c; int x = 0, f = 1;
        c = getchar();
        while (c > '9' || c < '0') { if(c == '-') f = -1; c = getchar();}
        while (c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
        return x * f;
    }
    signed main() {
        n = read(), k = read();
        rep(i, 1, n) p[i] = read();
        rep(i, 1, n) q[i] = read();
        rep(i, 1, n) a[p[i]] = c[p[i]] = i - n - 1;
        rep(i, 1, n) {
            if(k > q[i] - 1) b[q[i]] = -n, k -= q[i] - 1;
            else if(k == q[i] - 1) {
                b[q[i]] = -n;
                rep(j, i + 1, n) b[q[j]] = n;
                break;
            }
            else {
                sort(c + 1, c + q[i]);
                b[q[i]] = -c[k + 1];
                rep(j, i + 1, n) b[q[j]] = n;
                break;
            }
        }
        puts("Yes");
        rep(i, 1, n) printf("%lld ", a[i]); puts("");
        rep(i, 1, n) printf("%lld ", b[i]); puts("");
        return 0;
    }
    

    实际上,我认为像这样固定某一方,从另一方的视角看待整个限制两者的方法也可以认为是一种主元法。

    GO!
  • 相关阅读:
    数据仓库专题18-数据建模语言IDEF(转载)
    数据仓库专题(14)-数据仓库建设指导原则:一切以就绪数据为主
    数据仓库专题(16)-分布式数据仓库实践指南-目录篇
    解释器模式
    命令模式
    责任链模式
    代理模式
    享元模式
    外观模式
    装饰器模式
  • 原文地址:https://www.cnblogs.com/Go7338395/p/13835890.html
Copyright © 2011-2022 走看看