NYOJ水题题解-108士兵杀敌(一)

来源:互联网 发布:公安局网络借贷监管 编辑:程序博客网 时间:2024/06/11 21:48

题目:题目108

开始想的是用常规方法加:

#include<iostream>#include <math.h>#include<stdlib.h>using namespace std;int kill[1000005];int main(){int N,M,i,m,n,ans;cin >> N >> M;for (i = 0; i < N; i++)cin >> kill[i];while (M--){ans = 0;cin >> m>>n;for (i = m-1; i < n; i++){ans += kill[i];}cout << ans << endl;}return 0;}


因为每给一个范围都要进行大片的加法,所以会导致超时。于是找题解找到一种方法优化了代码。

思路:在输入每一个士兵kill值时,累加,用s数组存储前i项和

当然,iostream.h也是超时,太严苛了2333,把cin,cout都放弃了就ac了

#include<stdio.h>int kill[1000005],s[1000005];int main(){int N,M,i,m,n;scanf("%d %d", &N, &M);s[0] = 0;for (i = 1; i <= N; i++){scanf("%d", &kill[i]);s[i] = s[i - 1] + kill[i];}while (M--){scanf("%d %d", &m, &n);printf("%d\n", s[n] - s[m - 1]);}return 0;}


0 0
原创粉丝点击