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

题目:题目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;
}


发布了48 篇原创文章 · 获赞 21 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/qq_33810513/article/details/52087469
今日推荐