zoukankan      html  css  js  c++  java
  • C. Alyona and mex

    http://codeforces.com/contest/740/problem/C

    构造思维题。

    第一直觉就是区间长度+1的最小值就是答案。

    然而不知道怎么去构造这个序列、

    其实就是每个区间,都要包含0、1、2、3、...ans - 1即可。

    所以,只要不断0、1、2、3、4、...ans - 1、0、1、2、3、....这样放即可。

    因为最小的区间长度是ans - 1,那么选出来的区间只能比这个大,那么拿到绝对包含了0、1、2、3、4...ans - 1

    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    #define IOS ios::sync_with_stdio(false)
    using namespace std;
    #define inf (0x3f3f3f3f)
    typedef long long int LL;
    
    #include <iostream>
    #include <sstream>
    #include <vector>
    #include <set>
    #include <map>
    #include <queue>
    #include <string>
    const int maxn = 1e5 + 20;
    struct node {
        int L, R;
        int val;
        bool operator < (const struct node & rhs) const {
            if (val != rhs.val) return val < rhs.val;
            else if (R != rhs.R) return R > rhs.R;
            else return L > rhs.L;
        }
    } q[maxn];
    int a[maxn];
    int vis[maxn];
    int n, m;
    
    void work() {
        IOS;
        cin >> n >> m;
        int ans = inf;
        for (int i = 1; i <= m; ++i) {
            cin >> q[i].L >> q[i].R;
            q[i].val = q[i].R - q[i].L + 1;
            ans = min(ans, q[i].val);
        }
        cout << ans << endl;
        int to = 0;
        for (int i = 1; i <= n; ++i) {
            cout << to << " ";
            to++;
            to %= ans;
        }
    }
    
    int main() {
    #ifdef local
        freopen("data.txt","r",stdin);
    #endif
        work();
        return 0;
    }
    View Code
  • 相关阅读:
    狗狗急性肠胃炎
    shell change password
    男职工为什么要交生育保险
    预扣预缴个税
    转《最优状态机》
    状态机编程-队列缓冲事件,事件可异步触发
    max713镍氢电池充电管理IC
    NUP2201MR
    LSP5513
    74HC14D(6反向施密特触发器)
  • 原文地址:https://www.cnblogs.com/liuweimingcprogram/p/6099377.html
Copyright © 2011-2022 走看看