题解:P17297 [ICPC 2026 Xi'an I] Qenerals
Description
- 初始 Yuki 有
1 个堡垒和0 个士兵。 - Yuki 可以选择消耗
a_j 个士兵占领一个堡垒,并获得每秒多生产一个士兵的能力。当然 Yuki 也可以选择不操作。
思路
这是一个经典的贪心算法问题。
我们先将所有的
AC Code
#include <bits/stdc++.h>
using namespace std;
int n,m,t;
int a[3374982];
void solve()
{
cin>>t;
while(t--)
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
sort(a+1,a+n+1);
long long cur_x=0;
long long cur_y=1;
long long cur_t=0;
long long ans=m;
for(int i=1;i<=n;i++)
{
long long cost=a[i];
long long wait=0;
if(cur_x<cost)
{
long long diff=cost-cur_x;
wait=(diff+cur_y-1)/cur_y;
}
long long next_t=cur_t+wait;
if(next_t>m)
{
break;
}
cur_x+=wait*cur_y;
cur_x-=cost;
cur_y+=1;
cur_t=next_t;
long long time=m-cur_t;
long long final_x=cur_x+time*cur_y;
if(final_x>ans)
{
ans=final_x;
}
}
cout<<ans<<endl;
}
}
int main()
{
solve();
return 0;
}