ACM 2018 青島區域賽 J-Books (模擬)
阿新 • • 發佈:2018-12-01
題目大意:
DG去書店買書,有n本書按順序放置。買書的策略是從1到n本,遇到價格<=當前手中的錢的書就買
現在告訴你每本書的價格和DG總共買了多少本數,要求出DG手裡的最大可能錢數
題解:
讀入的時候統計一下價格為0的書的數目zero和價格不為0的數目l
如果zero>m,就是Impossible
如果m==l,就是Richman
否則
從前往後遍歷價格不為0的書,前m本價格直接加和sum,然後再m+1到l本中找出最小值t,但就是sum+t-1
#include<bits/stdc++.h> #include<cstring> #define ll long long #define INF 1000000007 using namespace std; int main() { int T,n,m,x; scanf("%d",&T); while(T--) { scanf("%d%d",&n,&m); vector<int>v; for(int i=1; i<=n; ++i) { scanf("%d",&x); if(x!=0) v.push_back(x); } int len=v.size(); int zero=n-len; if(m<zero) puts("Impossible"); else if(m==n) puts("Richman"); else { m-=zero; ll sum=0; int t=INF; for(int i=0; i<len; ++i) { if(i+1<=m) sum+=v[i]; else t=min(t,v[i]); } sum+=t-1; printf("%lld\n",sum); } } return 0; }