C. Valhalla Siege

题意:有n个勇士一排排好,有血量,然后会有q次进攻,每次进攻都会扣勇士qi点血,如果勇士死了自动杀下一个,全死了将会在下一轮之前复活,要求输出每次进攻完之后剩了几个勇士
思路:二分加前缀和处理
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxn=200008;
int a[maxn],sum[maxn];
signed main()
{
int n,i,j,t,k,q;
cin>>n>>q;
for(i=1;i<=n;i++)
{
cin>>a[i];
}
for(i=1;i<=n;i++)
{
sum[i]=sum[i-1]+a[i];
}
int sum1=0;
for(i=1;i<=q;i++)
{
int cx;
cin>>cx;
sum1+=cx;
if(sum1>=sum[n])
{
cout<<n<<endl;
sum1=0;
continue;
}
int l=1,r=n+1;
while(r-l>1)
{
int mid=l+r>>1;
if(sum[mid]>sum1)
{
r=mid;
}
else
{
l=mid;
}
}
if(sum1<a[l])
cout<<n-l+1<<endl;
else
cout<<n-l<<endl;
}
}
// 1 3 6 10
// 9 10 20 26
// 9 0 0 6
该博客介绍了如何运用二分查找和前缀和的方法解决一个涉及勇士血量和攻击的数学问题。给定n个勇士的血量及q次攻击力度,计算每次攻击后剩余的勇士数量。当勇士血量不足以承受攻击时,会自动转到下一个勇士。题目要求在每轮攻击后输出剩余勇士数。博主通过编程实现,展示了高效求解此类问题的思路。
1326

被折叠的 条评论
为什么被折叠?



