列表

详情


NC214298. 子序列求和

描述

乎乎得到一整数序列A1,A2,...,An,求A1-An中的一个子序列Ap-Aq的和,共T组测试。

输入描述

输入为T+3行,
第一行,为一个整数n,范围为(3~1000),表示输入序列的长度,
第二行,输入n个整数,每个整数的范围为(1~1000),用空格隔开,
第三行,输入一个整数T,表示T组测试数据。
接下来T行,每行两个整数p和q(1 ≤ p≤ q≤10000),用空格隔开,第一个整数表示子序列的开始,第二个整数表示子序列的结束。

输出描述

共T行,针对每组输入的子序列的开始和子序列的结束,输出子序列的和并换行,如果 n < p ≤ q,则输出0,如果 p ≤ n ≤ q,则输出p和q覆盖的子序列和。

示例1

输入:

6
1 2 3 4 5 6
3
1 3
3 6
5 8

输出:

6
18
11

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(clang++11) 解法, 执行用时: 2ms, 内存消耗: 404K, 提交时间: 2020-11-27 19:56:28

#include<bits/stdc++.h>
using namespace std;
int a[12345],n,t;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++)
	 cin>>a[i];
	cin>>t;
	while(t--){
		int x,y,cnt=0;
		cin>>x>>y;
		for(int i=x;i<=y;i++)
		 cnt+=a[i];
		cout<<cnt<<endl;
	} 
	return 0;
}

C 解法, 执行用时: 6ms, 内存消耗: 384K, 提交时间: 2022-04-16 22:00:55

#include<stdio.h>
int main()
{
	int n,t,p,q,i,a[20000],s;
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	scanf("%d",&a[i]);
	scanf("%d",&t);
	for(i=0;i<t;i++)
	{
		scanf("%d%d",&p,&q);
		for(s=0;p<=q;p++)
		s+=a[p];
		printf("%d\n",s);
	}
	return 0;
}

上一题