NYOJ 228 士兵杀敌(五)
来源:互联网 发布:创龙传 大众软件 编辑:程序博客网 时间:2024/05/12 03:32
题目链接:点击...
对于这道题的解题思路,我只能说很吊,无结构无算法才是最高境界吧!!!!
但是对于这道题的评判系统,我只能说卧槽了!!!! java评测有误!!!!
还有就是题目表述有问题!!! 请看:现已知共有M个士兵,编号为0~M!!
说了有M,编号的个数确实(M+1)个!!!!
5 3 21 3 22 4 15 5 10//但是看这组测试数据,编号确实从1到M,但是呢!!!!测试数据里竟然有编号为0的!!!
真实醉了,醉睡过去了!!!
但是呢,吐槽归吐槽,这道题的解法还是相当新颖的,美,真的很美!!!
题目大意:编号为1-M的士兵,都是连续杀敌的,杀敌之后每个人都增加一定的军工,然后询问从start到end的士兵的军工和。
思路:第一开始,我还以为是树状数组,插线问线,但是又想了想,数组数组是对于动态插入,查询效率比较高,而这道题是静态的,
就是都插入了,再查询!!! 那树状数组就不一定是最优了!!!
上码,码上解释!!!
import java.io.BufferedInputStream;import java.io.IOException;import java.io.InputStream;public class Main {public static void main(String[] args) throws IOException {InputStream mis = new MyInputStream();int[] arr = new int[1000005];int n, inputN, queryN, start, end, add;n = mis.read();inputN = mis.read();queryN = mis.read();while (inputN-- > 0) {start = mis.read();end = mis.read();add = mis.read();/////////////////////////////////////////////////////////////////这两句是绝了!!! 我们输入的是从start到end,每个士兵都增加军工add,//但是这里只对arr[start]和arr[end+1]做处理,因为后面要通过一个for循环,把前面一项//加到当前一项,在start-end之间的都会加上add,在end之后加上add,又减去add!!!//真不知道这种解法是谁想出来的!!!!!!arr[start] += add;arr[end + 1] -= add;///////////////////////////////////////////////////////////////}//一个for循环,把arr[i]变成第i士兵的军工for (int i = 1; i <= n; i++) {arr[i] += arr[i - 1];}//这个for循环,把arr[i]变成第一个到第i个士兵军工的总和!!!for (int i = 1; i <= n; i++) {arr[i] = (arr[i] + arr[i - 1]) % 10003;}while (queryN-- > 0) {start = mis.read();end = mis.read();if (start == 0) {start = 1;}<span style="white-space:pre"></span>//这里,有可能不确定start跟end的大小关系!!!System.out.println((arr[end] - arr[start - 1] + 10003) % 10003);}mis.close();mis = null;}}class MyInputStream extends InputStream {//改写输入流,提高速度private BufferedInputStream bis = new BufferedInputStream(System.in);public int read() throws IOException {int i, x = 0;while ((i = bis.read()) < '0' || i > '9');//找到第一个数符while (i >= '0' && i <= '9') {//如果遇到非数符就退出x = x * 10 + i - '0';i = bis.read();}return x;}}
这个代码在nyoj上过不了!!!!!它的评测系统有错误!!!!坑爹!!!
0 0
- NYOJ 228 士兵杀敌(五)
- NYOJ 228 士兵杀敌(五)
- NYOj-228-士兵杀敌(五)
- nyoj 228 士兵杀敌(五)
- nyoj 228 士兵杀敌(五)
- nyoj 228士兵杀敌(五)
- NYOJ 228 士兵杀敌 五
- NYOJ 228 士兵杀敌(五)
- NYOJ 228 士兵杀敌(五)(数组灵活运用)
- NYOJ 228 士兵杀敌(五) (巧用数组)
- nyoj~228 士兵杀敌(五)(思路)
- NYOJ 228 士兵杀敌五(插线问线__离线版)
- nyoj 228 士兵杀敌(五)【树状数组】
- nyoj 228 士兵杀敌(五) <区间求和>
- NYOJ-228 士兵杀敌(五) (思维)
- nyoj 288 士兵杀敌(五)
- 士兵杀敌(五)
- 士兵杀敌(五)
- android View的布局宽高之LayoutInflater函数详解
- Xcode模拟器存放文件位置
- 读改善java程序的151个建议(3)
- Spring启动时报异常:No String constructor found on type [java.lang.reflect.Method]
- 求整数n的二进制形式
- NYOJ 228 士兵杀敌(五)
- 特效1 闪光字体(适应于启动页)
- Android-设置PullToRefresh下拉刷新样式
- 你以为你是谁?
- 普通程序员的出路在哪里?
- 搭一个银行系统框架
- Collecting Bugs+POJ 2096+概率期望dp
- 世界六大健康饮料
- Objective-C中的浅拷贝和深拷贝