ACM ICPC NEERC, Northern Subregional Contest K:Key to Success
题目链接:
https://odzkskevi.qnssl.com/bf224a6abe30b2581b0f33f6bc394c79?v=1523035391
【K题思路;】
模拟凑数问题,如果前缀和 小于后面的数 -1 那么说明 中间某个数是凑不出来的,
就需要加上sum+1 这个数。
如果说都能凑出来那么, 再加一个 sum+1 在 sum - sum+sum+1 之间的数都可以凑出来‘
【code】
#include <iostream> #include <bits/stdc++.h> typedef long long ll; const int MAXN=1e5+5; using namespace std; vector<ll>V,ans; int main() { freopen("key.in","r",stdin); freopen("key.out","w",stdout); ll n,m; cin>>n>>m; for(int i=1;i<=n;i++) { ll x; cin>>x; V.push_back(x); } int cot=0; sort(V.begin(),V.end()); ll sum=0; for(;cot<m;cot++) { sum=0; sort(V.begin(),V.end()); for(int i=0;i<V.size();i++) { if(sum<V[i]-1) { V.push_back(sum+1); ans.push_back(sum+1); break; sum+=1; } sum+=V[i]; } } // cout<<sum<<endl; if(ans.size()<m) { int up=(m-ans.size()); for(int cot=0;cot<up;cot++) { ans.push_back(sum+1); sum+= sum+1; } } for(int i=0;i<ans.size();i++) { if(i==0) cout<<ans[i]; else cout<<" "<<ans[i]; } cout<<endl; fclose(stdin); fclose(stdout); return 0; }
123
岂曰无衣?与子同袍。王于兴师,修我戈矛。与子同仇!
岂曰无衣?与子同泽。王于兴师,修我矛戟。与子偕作!
岂曰无衣?与子同裳。王于兴师,修我甲兵。与子偕行!