• CodeForces 703B Mishka and trip


    简单题。

    先把环上的贡献都计算好。然后再计算每一个$capital$ $city$额外做出的贡献值。

    假设$A$城市为$capital$ $city$,那么$A$城市做出的额外贡献:$A$城市左边城市$L$和右边城市$R$都不能和$A$做出贡献,之前存在的$capital$ $city$和$A$城市不能做出贡献,要注意的是$L$和$R$中存在$capital$ $city$的情况。剩下的城市都可以和$A$做出贡献。

    #pragma comment(linker, "/STACK:1024000000,1024000000")
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<vector>
    #include<map>
    #include<set>
    #include<queue>
    #include<stack>
    #include<iostream>
    using namespace std;
    typedef long long LL;
    const double pi=acos(-1.0),eps=1e-8;
    void File()
    {
        freopen("D:\in.txt","r",stdin);
        freopen("D:\out.txt","w",stdout);
    }
    
    const int maxn=100010;
    int n,k;
    LL c[maxn],sum,y,p;
    bool f[maxn];
    
    int main()
    {
        scanf("%d%d",&n,&k);
        for(int i=1;i<=n;i++) scanf("%lld",&c[i]);
        LL ans=0; c[n+1]=c[1];
    
        for(int i=1;i<=n;i++)  ans=ans+c[i]*c[i+1],y=y+c[i];
        for(int i=1;i<=k;i++)
        {
            int x; scanf("%d",&x); sum=y;
            int L=x-1,R=x+1; if(L==0) L=n; if(R==n+1) R=1;
            sum=sum-c[L]-c[R]-c[x]; sum=sum-p;
            if(f[L]) sum=sum+c[L]; if(f[R]) sum=sum+c[R];
            ans=ans+c[x]*sum; f[x]=1; p=p+c[x];
        }
        printf("%lld
    ",ans);
        return 0;
    }
  • 相关阅读:
    验证码
    SQL给字段加上统一的某个字符
    科讯CMS V9标签清单
    需要重新启动计算机.必须重新启动计算机才能安装 SQL Server
    父页面iframe自动适应子页面的宽高度
    div随另一个div自动增高
    让图片在DIV中垂直居中
    nginx default server
    zabbix proxy 分布式监控
    openjdk tomcat 安装
  • 原文地址:https://www.cnblogs.com/zufezzt/p/5809111.html
Copyright © 2020-2023  润新知