SDUT 3108 赏赏赏
来源:互联网 发布:mac 百度云下载太慢 编辑:程序博客网 时间:2024/04/30 08:56
赏赏赏
Time Limit: 2000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
B国大举进犯,A国根据地利设下埋伏获得全胜,战后A国王论功行赏,现在问题来了。
现在我们将问题简化,已知B国一共来了M个士兵,每个士兵的生命值为Hi,A国设置了N个据点,当士兵经过第j个据点时,生命值减少Wj,当士兵的生命值小于等于0时就会被当前这个据点杀死。由于地形原因士兵必须依次经过据点1,据点2,据点3. . . . . .据点N。
现在A国王想知道前M个据点的杀敌数为多少。
输入
多组输入。
对于每组数据,首先输入两个整数N,M(1 <= N <= 100000,1 <= M<= min(N, 10000))。
接下来的M行,每行一个整数Hi,代表第i个士兵的初始生命值。(1 <= Hi <= 10000000)
接下来的N行,每行一个整数Wj,代表第j个据点的攻击力。(0 <= Wi <= 10000)
输出
对于每组数据。
输出M行,每行一个整数代表第j个据点的杀敌数。
示例输入
3 3123111
#include <bits/stdc++.h>using namespace std;int a[100001],PH[10001],c[10001];int main(){ std::ios::sync_with_stdio(false); int m,n; while(cin>>n>>m) { for(int i=0;i<m;i++) { cin>>PH[i]; } sort(PH,PH+m); for(int i=0;i<m;i++) c[i] = 0; for(int i=0;i<n;i++) { cin>>a[i]; a[i] = i==0?a[i]:a[i-1]+a[i]; } for(int i=0,j=0;i<m && j<m;) { if(a[i]>=PH[j]) { c[i]++; j++; } else i++; } for(int i=0;i<m;i++) { cout<<c[i]<<endl; } } return 0;}
0 0
- SDUT 3108 赏赏赏
- SDUT-2109&&SDUT-3398
- sdut 1248
- sdut 1468
- sdut 2039
- sdut 2123
- sdut Emergency
- sdut 2151
- sdut 2169
- SDUT 周赛
- SDUT 整除
- SDUT 2829
- sdut 3260
- SDUT 3300
- sdut 2605
- SDUT 2608
- SDUT 2169
- sdut 3100
- JS刷新页面的几种方法
- Java二十周年记 - 我与Java的故事
- 集合框架总结(基础知识)
- Swing
- ZigBee无线DCS现场控制站设计
- SDUT 3108 赏赏赏
- 亲子共读心得
- POJ 2570 floyd(传递闭包+状态压缩)
- IO 流
- block内存管理
- 七律 读百色画作有感
- js-defer
- Zigbee无线网络在线心电监测系统
- zend framework2-控制器插件创建公用对象函数,可在控制器直接调用