PAT甲1046 简单模拟

题目链接

思路:用前缀和计算前缀的和为多少,然后判断两种方法直接到还是走两段的付出少,记为ans

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include<iostream>
using namespace std;
const int maxn=1e5+7;
typedef long long ll;
ll sum[maxn],total;
int a[maxn];
void pd(int &x,int &y)
{
int t;
if(x>y)
{
t=x;
x=y;
y=t;
}
}
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
sum[i]=a[i]+sum[i-1];
total+=a[i];
}
int m;
cin>>m;
while(m--)
{
int x,y;
cin>>x>>y;
pd(x,y);
ll ans1=0,ans2=0,ans;
ans1=sum[y-1]-sum[x-1];
ans2=total-(ans1);
ans=min(ans1,ans2);
cout<<ans<<endl;
}
return 0;
}
-------------本文结束感谢您这么好看还看我的文章-------------