CodeForces 703B Mishka and trip

    xiaoxiao2025-09-17  56

    http://codeforces.com/problemset/problem/703/B

    #include<stdio.h> #include<string> #include<cstring> #include<queue> #include<algorithm> #include<functional> #include<vector> #include<iomanip> #include<math.h> #include<iostream> #include<sstream> #include<stack> #include<set> #include<bitset> using namespace std; const int MAX=100005; typedef long long ll; int n,k,C[MAX],used[MAX],K,cnt; int main() { while (scanf("%d%d",&n,&k)!=EOF) { cnt=1; ll sum=0; memset(used,0,sizeof(used)); for (int i=1; i<=n; i++) { scanf("%d",&C[i]); sum+=C[i]; } ll Ans=0; for (int i=1; i<n; i++) Ans+=C[i]*C[i+1]; Ans+=C[1]*C[n]; for (int i=1; i<=k; i++) { scanf("%d",&K); if (K==1) { Ans+=C[K]*(sum-C[K]-C[n]-C[K+1]); if(used[n]) Ans+=C[K]*C[n]; if(used[K+1]) Ans+=C[K]*C[K+1]; } else if (K==n) { Ans+=C[K]*(sum-C[K]-C[K-1]-C[1]); if(used[K-1]) Ans+=C[K]*C[K-1]; if(used[1]) Ans+=C[K]*C[1]; } else { Ans+=C[K]*(sum-C[K]-C[K-1]-C[K+1]); if(used[K-1]) Ans+=C[K]*C[K-1]; if(used[K+1]) Ans+=C[K]*C[K+1]; } used[K]=true; sum-=C[K]; } cout<<Ans<<endl; } return 0; }
    转载请注明原文地址: https://ju.6miu.com/read-1302735.html
    最新回复(0)