Codeforces-975C - Valhalla Siege 前缀和 思维
2 seconds
256 megabytes
standard input
standard output
Ivar the Boneless is a great leader. He is trying to capture Kattegat from Lagertha. The war has begun and wave after wave Ivar's warriors are falling in battle.
Ivar has nn warriors, he places them on a straight line in front of the main gate, in a way that the ii-th warrior stands right after (i−1)(i−1)-th warrior. The first warrior leads the attack.
Each attacker can take up to aiai arrows before he falls to the ground, where aiai is the ii-th warrior's strength.
Lagertha orders her warriors to shoot kiki arrows during the ii-th minute, the arrows one by one hit the first still standing warrior. After all Ivar's warriors fall and all the currently flying arrows fly by, Thor smashes his hammer and all Ivar's warriors get their previous strengths back and stand up to fight again. In other words, if all warriors die in minute tt, they will all be standing to fight at the end of minute tt.
The battle will last for qq minutes, after each minute you should tell Ivar what is the number of his standing warriors.
The first line contains two integers nn and qq (1≤n,q≤2000001≤n,q≤200000) — the number of warriors and the number of minutes in the battle.
The second line contains nn integers a1,a2,…,ana1,a2,…,an (1≤ai≤1091≤ai≤109) that represent the warriors' strengths.
The third line contains qq integers k1,k2,…,kqk1,k2,…,kq (1≤ki≤10141≤ki≤1014), the ii-th of them represents Lagertha's order at the ii-th minute: kiki arrows will attack the warriors.
Output qq lines, the ii-th of them is the number of standing warriors after the ii-th minute.
5 5
1 2 1 2 1
3 10 1 1 1
3
5
4
4
3
4 4
1 2 3 4
9 1 10 6
1
4
4
1
In the first example:
- after the 1-st minute, the 1-st and 2-nd warriors die.
- after the 2-nd minute all warriors die (and all arrows left over are wasted), then they will be revived thus answer is 5 — all warriors are alive.
- after the 3-rd minute, the 1-st warrior dies.
- after the 4-th minute, the 2-nd warrior takes a hit and his strength decreases by 1.
- after the 5-th minute, the 2-nd warrior dies
题意:你有n个士兵,每个士兵的生命值为
aiai,有q轮攻击,每轮攻击的伤害值为kiki,如果在某一轮中士兵全部死光了,那么在这一轮结束的时候就会全部复活,且这一轮攻击剩下的伤害就会被忽略,问你每轮攻击结束后你会有多少个士兵。
题解:对n个士兵的生命值记一下前缀和,每轮攻击的时候用upper_bound找一下前缀和里第一个大于
kiki的值所对应的编号,假设这一轮中upper_bound的结果为cur,那么前cur - 1个士兵一定全部死完了,所以就会剩下n - cur + 1个士兵。
题目:
Ivar the Boneless is a great leader. He is trying to capture Kattegat from Lagertha. The war has begun and wave after wave Ivar’s warriors are falling in battle.
Ivar has nn warriors, he places them on a straight line in front of the main gate, in a way that the ii-th warrior stands right after (i−1)(i−1)-th warrior. The first warrior leads the attack.
Each attacker can take up to aiai arrows before he falls to the ground, where aiai is the ii-th warrior’s strength.
Lagertha orders her warriors to shoot kiki arrows during the ii-th minute, the arrows one by one hit the first still standing warrior. After all Ivar’s warriors fall and all the currently flying arrows fly by, Thor smashes his hammer and all Ivar’s warriors get their previous strengths back and stand up to fight again. In other words, if all warriors die in minute tt, they will all be standing to fight at the end of minute tt.
The battle will last for qq minutes, after each minute you should tell Ivar what is the number of his standing warriors.
Input
The first line contains two integers nn and q(1≤n,q≤200 000)q(1≤n,q≤200 000) — the number of warriors and the number of minutes in the battle.
The second line contains nn integers a1,a2,…,an(1≤ai≤109)a1,a2,…,an(1≤ai≤109) that represent the warriors’ strengths.
The third line contains qq integers k1,k2,…kq(1≤ki≤1014)k1,k2,…kq(1≤ki≤1014), the ii-th of them represents Lagertha’s order at the ii-th minute: kiki arrows will attack the warriors.
Output
Output qq lines, the ii-th of them is the number of standing warriors after the ii-th minute.
Examples
input
5 5
1 2 1 2 1
3 10 1 1 1
- 1
- 2
- 3
output
3
5
4
4
3
- 1
- 2
- 3
- 4
- 5
input
4 4
1 2 3 4
9 1 10 6
- 1
- 2
- 3
output
1
4
4
1
- 1
- 2
- 3
- 4
Note
In the first example:
after the 1-st minute, the 1-st and 2-nd warriors die.
after the 2-nd minute all warriors die (and all arrows left over are wasted), then they will be revived thus answer is 5 — all warriors are alive.
after the 3-rd minute, the 1-st warrior dies.
after the 4-th minute, the 2-nd warrior takes a hit and his strength decreases by 1.
after the 5-th minute, the 2-nd warrior dies.
题意:
你有n个士兵,每个士兵的生命值为aiai,有q轮攻击,每轮攻击的伤害值为kiki,如果在某一轮中士兵全部死光了,那么在这一轮结束的时候就会全部复活,且这一轮攻击剩下的伤害就会被忽略,问你每轮攻击结束后你会有多少个士兵。
思路:
对n个士兵的生命值记一下前缀和,每轮攻击的时候用upper_bound找一下前缀和里第一个大于kiki的值所对应的编号,假设这一轮中upper_bound的结果为cur,那么前cur - 1个士兵一定全部死完了,所以就会剩下n - cur + 1个士兵。
(用前缀和的思想把多次的伤寒换算为一次,这样使用二分的时候就简单很多了)
ac代码:
#include <cstdio>
#include <iostream>
#include <cstring>
#include <queue>
#include <algorithm>
using namespace std;
typedef long long ll;
const int maxn = int(2e5) + ;
ll a[maxn], k[maxn], sum[maxn], dmg; int main() {
int n, q;
scanf("%d%d", &n, &q);
for (int i = ; i <= n; i++) scanf("%lld", a + i), sum[i] = sum[i - ] + a[i];
for (int i = ; i <= q; i++) scanf("%lld", k + i);
for (int turn = , cur; turn <= q; turn++)
{
dmg += k[turn];
if (dmg >= sum[n]) dmg = , printf("%d\n", n);
else printf("%d\n", n - int(std::upper_bound(sum + , sum + + n, dmg) - sum - ));
}
return ;
}
Codeforces-975C - Valhalla Siege 前缀和 思维的更多相关文章
- codeforces 975C Valhalla Siege
题意: 有n个巫师站成一列,每个巫师有自己的血量. 一个人射箭攻击他们,每次造成若干点伤害,巫师按照给定的顺序承受伤害,如果伤害大了,那么死掉,伤害落到下一个巫师身上. 如果一轮攻击之后,所有的巫师都 ...
- [codeforce 975C] Valhalla Siege (二分)
Examples input 5 5 1 2 1 2 1 3 10 1 1 1 output 3 5 4 4 3 input 4 4 1 2 3 4 9 1 10 6 output 1 4 4 1 N ...
- Codeforces Round #478 C. Valhalla Siege
C. Valhalla Siege time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...
- 洛谷 P1360 [USACO07MAR]Gold Balanced Lineup G (前缀和+思维)
P1360 [USACO07MAR]Gold Balanced Lineup G (前缀和+思维) 前言 题目链接 本题作为一道Stl练习题来说,还是非常不错的,解决的思维比较巧妙 算是一道不错的题 ...
- CodeForces - 776C(前缀和+思维)
链接:CodeForces - 776C 题意:给出数组 a[n] ,问有多少个区间和等于 k^x(x >= 0). 题解:求前缀和,标记每个和的个数.对每一个数都遍历到1e5,记录到答案. # ...
- Codeforces 873 B. Balanced Substring(前缀和 思维)
题目链接: Balanced Substring 题意: 求一个只有1和0的字符串中1与0个数相同的子串的最大长度. 题解: 我的解法是设1的权值是1,设0的权值是-1,求整个字符串的前缀和并记录每个 ...
- Educational Codeforces Round 30 B【前缀和+思维/经典原题】
B. Balanced Substring time limit per test 1 second memory limit per test 256 megabytes input standar ...
- Codeforces Round #304 (Div. 2) D 思维/数学/质因子/打表/前缀和/记忆化
D. Soldier and Number Game time limit per test 3 seconds memory limit per test 256 megabytes input s ...
- Codeforces Round #143 (Div. 2) (ABCD 思维场)
题目连链接:http://codeforces.com/contest/231 A. Team time limit per test:2 seconds memory limit per test: ...
随机推荐
- To avoid slowing down lookups on a near-full table, we resize the table when it's USABLE_FRACTION (currently two-thirds) full.
https://github.com/python/cpython/blob/3.8/Objects/dictobject.c
- android: Android水波纹点击效果
Android API 21及以上新增了ripple标签用来实现水波纹的效果.我们可以通过设置ripple背景来实现一些View点击效果. 该水波纹效果有两种:一种是有界的(点击后类似于一个矩形向四周 ...
- 为Apache添加MP4扩展
apxs是apache的一个辅助工具软件,它通常用来为apache安装扩展模块,甚至可以直接将.c的源程序自动编译成.so程序,并能自动配置httpd.conf文件,将新安装的扩展添加到配置文件中启用 ...
- leetcode 290. Word Pattern 、lintcode 829. Word Pattern II
290. Word Pattern istringstream 是将字符串变成字符串迭代器一样,将字符串流在依次拿出,比较好的是,它不会将空格作为流,这样就实现了字符串的空格切割. C++引入了ost ...
- 0.9.0.RELEASE版本的spring cloud alibaba sentinel+feign降级处理实例
既然用到了feign,那么主要是针对服务消费方的降级处理.我们基于0.9.0.RELEASE版本的spring cloud alibaba nacos+feign实例添油加醋,把sentinel功能加 ...
- 解决:error: Cannot find libmysqlclient_r under /usr/local/mysql.
libodb-mysql-2.4.0.tar.gz 解压完安装libodb-mysql时,执行完./cofigure后,出现如下错误: checking for libmysqlclient_r... ...
- ROS学习笔记(三)
机器人建模与仿真URDF(Unified Robot Descrption Format,统一机器人描述格式),ROS提供了URDF的c++解析器.安装语法检查工具sudo apt-get insta ...
- python哲学
import this The Zen of Python, by Tim Peters # python的设计哲学, 作者:Tim Peters Beautiful is better than u ...
- Spring cloud微服务安全实战-5-12实现基于token的SSO(2)
我只要把这个meFilter放在AuthorizationFilter后面就可以了. authorizationFilter的排序是3 MeFilter设置为4 就可以了. 拿到了username直接 ...
- 算法习题---5.9数据库(Uva1592)
一:题目 对数据库中数据进行检测,是否出现数据冗余现象.即是否某一列出现两个及以上数据重复 如上图中,第二列中第2,3行数据重复,所以我们判断为数据冗余.因为他可以分解为下面两张表 (一)样例输入 H ...