NC214298. 子序列求和
描述
输入描述
输入为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; }