题意

  Mishka想要去一个国家旅行,这个国家共有个城市,城市通过道路形成一个环,即第i个城市和第个城市之间有一条道路,此外城市和之间有一条道路。这个城市中有个首中心城市,中心城市与每个城市(除了自己)之间有一条道路。第城市个城市有一个魅力值,经过一条连接第个和第个城市的道路的费用是,求所有道路的费用之和是多少?

  注意:任何两个城市之间最多只有一条路。

思路

  先考虑所有中心城市:每条路只能算一遍,那么我们可以得到如下公式:

  其中,代表所有城市的魅力值的和,代表已经计算过的中心城市的魅力值,那么就代表第个中心城市连接其他城市道路的魅力值之和(无重复计算)。

  最后再枚举环中的条边,如果某条边连接的两个城市中有一个是中心城市,说明这条路已经计算过,不要重复计算。

  注意:答案可能超出int,用long long

AC代码

#include <stdio.h>
#include <string.h>
typedef long long LL;
const int maxn = 100000+5;
int n, k;
int c[maxn], d[maxn];
bool cp[maxn];
int main() {
    while(scanf("%d%d", &n, &k) == 2) {
        memset(cp, 0, sizeof(cp));
        LL sum = 0;
        for(int i = 1; i <= n; i++) {
            scanf("%d", &c[i]);
            sum += c[i];
        }
        int id;
        for(int i = 0; i < k; i++) {
            scanf("%d", &d[i]);
            cp[d[i]] = true;
        }
        //all capital cities
        int tol = 0;
        LL ans = 0;
        for(int i = 0; i < k; i++) {
            id = d[i];
            tol += c[id];
            ans += 1LL*c[id]*(sum-tol);
        }
        //the road bettwen two cities which aren't capital
        if(!cp[1] && !cp[n]) ans += c[1]*c[n];
        for(int i = 1; i < n; i++) {
            if(!cp[i] && !cp[i+1]) ans += c[i]*c[i+1];
        }
        printf("%lld\n", ans);
    }
    return 0;
} 

如有不当之处欢迎指出!

cf B. Mishka and trip (数学)的更多相关文章

  1. codeforces 703B B. Mishka and trip(数学)

    题目链接: B. Mishka and trip time limit per test 1 second memory limit per test 256 megabytes input stan ...

  2. 暑假练习赛 003 F Mishka and trip

    F - Mishka and trip Sample Output   Hint In the first sample test: In Peter's first test, there's on ...

  3. Codeforces Round #365 (Div. 2) Mishka and trip

    Mishka and trip 题意: 有n个城市,第i个城市与第i+1个城市相连,他们边的权值等于i的美丽度*i+1的美丽度,有k个首都城市,一个首都城市与每个城市都相连,求所有边的权值. 题解: ...

  4. cf703B Mishka and trip

    B. Mishka and trip time limit per test 1 second memory limit per test 256 megabytes input  standard ...

  5. Codeforces 703B. Mishka and trip 模拟

    B. Mishka and trip time limit per test:1 second memory limit per test:256 megabytes input:standard i ...

  6. CodeForces 703A Mishka and trip

    Description Little Mishka is a great traveller and she visited many countries. After thinking about ...

  7. B. Mishka and trip

    time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...

  8. CF A.Mishka and Contest【双指针/模拟】

    [链接]:CF/4892 [题意]: 一个人解决n个问题,这个问题的值比k小, 每次只能解决最左边的或者最右边的问题 解决了就消失了.问这个人能解决多少个问题. [代码]: #include<b ...

  9. CF 990A. Commentary Boxes【数学/模拟】

    [链接]:CF [题意]:对于一个数n,每次加一的代价是a,每次减一的代价是b,求被m整除时的最小代价. [分析]:分情况讨论,自己多举几个栗子. [代码]: #include<cstdio&g ...

随机推荐

  1. Django_MTV视图

    WEB服务请求流程? 用户请求通过url,url带着用户的用户信息封装成request,然后服务器收到url请求,激活获取url中带来的request,服务器处理request逻辑后,返回封装好的re ...

  2. tcpdump 使用

    例子: 首先切换到root用户 tcpdump -w  aaa.cap   -i eth7   -nn -x  'port  9999'  -c  1 以例子说明参数: -w:输出到文件aaa.cap ...

  3. IEEE754 处理数据变换

    public  class IEEE754 { /// <summary> /// 将二进制值转ASCII格式十六进制字符串 /// </summary> /// <pa ...

  4. VisionPro笔记(1):动态创建控件

     VisionPro学习笔记(1):动态创建控件 有的时候可能需要在程序中动态创建控件,VisionPro实例中提供了一例动态创建Blob控件的方法.当然,动态创建过多的控件会极大的消耗系统的资源,建 ...

  5. 【转】shell学习笔记(六)——流程控制之for循环

    基本语法格式: for 变量 in 列表 do 命令行(通常用到循环变量) done ********Linux Shell for循环写法总结******** for((i=1;i<</ ...

  6. c# HTTP技术

    种植头发能完全成活吗?头发上出现了掉落,头发变细等情况下是需要去看看是不是皮下的毛囊出了问题,要解决这个头发脱发上,选择植发的方式能有效改善,不过也不要小看这个头发脱发,脱发后如果不加以做好毛发护理, ...

  7. BZOJ 1815: [Shoi2006]color 有色图 [Polya DFS 重复合并]

    传送门 题意: 染色图是无向完全图,且每条边可被染成k种颜色中的一种.两个染色图是同构的,当且仅当可以改变一个图的顶点的编号,使得两个染色图完全相同.问N个顶点,k种颜色,本质不同的染色图个数(模质数 ...

  8. 【转】如何解决plsql查询oracle数据库语句where条件带有中文无法匹配结果

    一.问题描述 之前使用PLSQL查询oracle数据库可以正常查询统计结果,由于换了个电脑,重新安装之后,同样的sql查询语句同一个数据库,无法正常查询结果,如下图所示 二.解决办法 1. 查询数据当 ...

  9. C++ cin.get及getline的用法

    1.cin.get() 从指定的输入流中提取一个字符,函数的返回值就是这个字符.文件结束符会返回EOF,一般以-1代表EOF. #include<iostream> using names ...

  10. javaweb重定向的两种方式

    第一种 import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.Htt ...