思維-CF-739A
阿新 • • 發佈:2017-06-13
mex 大於等於 href class 由於 printf .com pre cst
http://codeforces.com/problemset/problem/739/A
Alyona and mex
對於一個非負整數數列a,定義mex(l, r)為不存在於a[l]~a[r]區間內的最小非負整數。
給定數列長度n,區間個數m。要求構造一個長度為n的數列使得這m個區間的最小mex最大。
輸出m個區間的最小mex,以及構造的數列(多組解時只需要輸出一組解即可)
解題報告
思路
(一開始沒看懂題目....)
對於一個長度為Len的區間,這個區間的mex最大值顯然為Len。
那麽現在有m個區間,若其中最小區間的長度為Len,那麽即使每個區間的mex都能取到最大值,最小mex也為Len。
那麽構造數列時只需要保證最小的區間取到最大mex即可。
於是可以用0~Len-1循環構造數列,由於所有數列長度都大於等於Len,就能保證所有區間都能覆蓋0~Len-1,那麽所得解即為Len。
代碼
#include <algorithm> #include <cstdio> const int maxn = 100005; int l, r, n, m; int minLen; int main() { scanf("%d%d", &n, &m); minLen = n; for (int i = 0; i < m; i++) { scanf("%d%d", &l, &r); minLen= std::min(minLen, r - l + 1); } printf("%d\n", minLen); int cnt = 0; for(int i=0; i<n; i++){ printf("%d ", cnt); cnt ++; cnt %= minLen; } printf("\n"); return 0; }
--(完)--
思維-CF-739A