ACM ICPC 2008–2009, NEERC, Northern Subregional Contest Problem K. Key to Success
题意:给n个数,问再添加哪m个数可以使这些数凑成他们所能构成的区间内任意数
原题链接:http://codeforces.com/gym/100623/attachments
太坑了,题目说m >= 1,实际上会有m = 0的情况
哎,其实就是贪心,1肯定要有,然后维护前缀和往后凑就行
#include <bits/stdc++.h> #define rep(i, l, r) for(int i=l; i<=r ;i++) using namespace std; typedef long long ll; typedef pair<int, int> PII; typedef vector<int> VI; ll gcd(ll n, ll m) { return n % m == 0 ? m : gcd(m, n % m);} template <typename T> void read(T& x) { x = 0; T flag = 1; char ch = getchar(); while(ch < '0' || ch > '9') { if(ch == '-') flag = -1; ch = getchar(); } while(ch >= '0' && ch <= '9') { x *= 10LL; x += ch - '0'; ch = getchar(); } x *= flag; } int main() { //ios::sync_with_stdio(false); freopen("key.in", "r", stdin); freopen("key.out", "w", stdout); int n, m; read(n), read(m); VI a; rep(i, 1, n){ int x; read(x); a.push_back(x); } sort(a.begin(), a.end()); ll sum = 0; for(ll i : a){ while (i > sum + 1 && m){ printf("%lld ", sum + 1); sum += sum + 1; m--; } sum += i; } while(m){ printf("%lld ", sum + 1); sum += sum + 1; m--; } return 0; }

浙公网安备 33010602011771号