题意:
能买则买,不买看下一个,给出一共卖了多少,问这个人最多可能有多少钱
思路:
注意价格为0不需要付钱,所以需要提前计算0的个数。然后买前几个书,加上后面最低价钱的书就是答案
#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long ll;
const int maxn = 1e5 + 10;
ll a[maxn];
ll ans;
int n,m;
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
ll minn ;
scanf("%d%d",&n,&m);
int numofzreo = 0;
for(int i = 1; i <= n ; i++)
{
scanf("%lld",&a[i]);
if(a[i] == 0) numofzreo++;
}
if(m == n)
{
printf("Richman\n");
}
else
{
ans = 0;
if(numofzreo > m)
{
printf("Impossible\n");
}
else
{
int cnt = 0;
int i = 1;
while(1)
{
if(cnt == m - numofzreo)
break;
if(a[i])
{
ans += a[i];
cnt ++;
}
i++;
}
minn = 1e9 + 10;
for(int j = i; j <= n; j++)
{
if(a[j])
minn = minn < a[j] ? minn : a[j];
}
printf("%lld\n",ans + minn - 1);
}
}
}
return 0;
}