题目大意是给你一个环上相邻两点之间的距离,问你任意两点间的最短距离。
用前缀和,判断顺着和逆着走哪边小,注意查询点的位置不一定是后面比前面大。水题~
#include <iostream> #include <string.h> using namespace std; #define maxn 100005 int a[maxn],b[maxn]; int main() { memset(b,0,sizeof(b)); int n,sum=0; cin>>n; for(int i=0;i<n;i++) { cin>>a[i]; sum+=a[i]; } for(int i=1;i<=n;i++) b[i]=a[i-1]+b[i-1]; int q,s,t; cin>>q; for(int i=0;i<q;i++) { cin>>s>>t; if(s>t) swap(s,t); int tmp=b[t-1]-b[s-1]; if(tmp<=sum-tmp) cout<<tmp<<endl; else cout<<sum-tmp<<endl; } }View Code