New Year and Rainbow Roads

思路:我们考虑两个绿点之间的红点和蓝点, 首先把这些红点和蓝点接到绿点上面绝对不会超过绿点距离的两倍。

然后我们先把两个绿点连上, 再把绿点经过蓝点到绿点的线连上, 绿点经过红点到绿点的线连上, 这时距离为3倍的绿点间距离,

然后我们可以在第二条路径和第三条路径上断开一段最长的, 和两个的绿点距离取个最小值,就是这段的贡献。

#include<bits/stdc++.h>
#define LL long long
#define fi first
#define se second
#define mk make_pair
#define PLL pair<LL, LL>
#define PLI pair<LL, int>
#define PII pair<int, int>
#define SZ(x) ((int)x.size())
#define ull unsigned long long
using namespace std; const int N = 3e5 + ;
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9 + ;
const double eps = 1e-; int n, p, dis[N];
char s[];
vector<int> G, R, B; int main() {
scanf("%d", &n);
for(int i = ; i <= n; i++) {
scanf("%d%s", &p, s);
if(s[] == 'G') G.push_back(p);
else if(s[] == 'R') R.push_back(p);
else B.push_back(p);
}
LL ans = ;
if(SZ(G)) {
int S = G[], T = G[SZ(G)-];
if(SZ(R) && R[] < S) ans += abs(R[] - S);
if(SZ(R) && R[SZ(R)-] > T) ans += abs(R[SZ(R)-] - T);
if(SZ(B) && B[] < S) ans += abs(B[] - S);
if(SZ(B) && B[SZ(B)-] > T) ans += abs(B[SZ(B)-] - T);
for(int i = ; i + < SZ(G); i++) {
LL l = G[i], r = G[i + ];
LL ret = , tmp1 = INF, tmp2 = INF;
int x = lower_bound(R.begin(), R.end(), l) - R.begin();
int y = lower_bound(R.begin(), R.end(), r) - R.begin() - ;
if(x <= y) {
tmp1 = min(tmp1, r-l-(R[x]-l));
tmp1 = min(tmp1, r-l-(r-R[y]));
for(int j = x; j < y; j++) tmp1 = min(tmp1, r-l-(R[j+]-R[j]));
} else tmp1 = ;
x = lower_bound(B.begin(), B.end(), l) - B.begin();
y = lower_bound(B.begin(), B.end(), r) - B.begin() - ;
if(x <= y) {
tmp2 = min(tmp2, r-l-(B[x]-l));
tmp2 = min(tmp2, r-l-(r-B[y]));
for(int j = x; j < y; j++) tmp2 = min(tmp2, r-l-(B[j+]-B[j]));
} else tmp2 = ;
ans += min( * (r - l), tmp1 + tmp2 + r - l);
}
} else {
if(SZ(R)) ans += R[SZ(R)-] - R[];
if(SZ(B)) ans += B[SZ(B)-] - B[];
}
printf("%lld\n", ans);
return ;
} /*
*/

Codeforces 908F New Year and Rainbow Roads的更多相关文章

  1. Codeforces 908F - New Year and Rainbow Roads 【脑洞】

    题意:在一条数轴上有若干'R','B','G'点,连接两个点的代价是位置差,要求使用最小代价使得除去所有'R'点后剩下的所有点联通,除去所有'B'点后剩下的所有点联通. 还以为会是什么最小生成树,结果 ...

  2. Codeforces Good Bye 2017 908F F. New Year and Rainbow Roads

    题 OvO http://codeforces.com/contest/908/problem/F CF 908F 解 需要注意细节的模拟题. 如果三种颜色都存在,则记每两个相邻的G组成一个段,对每个 ...

  3. Codeforces 629 E. Famil Door and Roads

    题目链接:http://codeforces.com/problemset/problem/629/E 询问这个简单环的期望.考虑将这个环拆成两部分. 令${deep[x]>=deep[y]}$ ...

  4. 【枚举】【DFS序】Gym - 101617G - Rainbow Roads

    题意:一颗树,每条边有个颜色,一条路径被定义为“彩虹”,当且仅当其上没有长度大于等于2的同色子路径.一个结点被定义为“超级结点”,当且仅当从其发出的所有路径都是“彩虹”. 枚举所有长度为2,且同色的路 ...

  5. Gym - 101615 D Rainbow Roads dfs序

    题目传送门 题目大意: 给出一颗树,每条边都有一个颜色,对一个点来说,如果其他所有点到这个点的简单路径,相连的边颜色都不同,这个点即合法点,统计所有的合法点. 思路: 对于一个节点来说 1.如果这个节 ...

  6. Gym-101615D Rainbow Roads 树的DFS序 差分数组

    题目链接:https://cn.vjudge.net/problem/Gym-101615D 题意 给一棵树,每个边权表示一种颜色. 现定义一条彩虹路是每个颜色不相邻的路. 一个好点是所有从该节点开始 ...

  7. [Codeforces]Good Bye 2017

    A - New Year and Counting Cards #pragma comment(linker, "/STACK:102400000,102400000") #inc ...

  8. 2017-2018 ACM-ICPC Pacific Northwest Regional Contest (Div. 1)

    A. Odd Palindrome 所有回文子串长度都是奇数等价于不存在长度为$2$的偶回文子串,即相邻两个字符都不同. #include<cstdio> #include<cstr ...

  9. 2017-2018 ACM-ICPC Pacific Northwest Regional Contest (Div. 1) Solution

    A - Odd Palindrome 水. #include <bits/stdc++.h> using namespace std; #define N 110 char s[N]; i ...

随机推荐

  1. Python OS模块中的fork方法实现多进程

    import os '''使用OS模块中的fork方式实现多进程''' '''fork方法返回两次,分别在父进程和子进程中返回,子进程中永远返回0,父进程返回的是子进程的is''' if __name ...

  2. 关于http请求时 安全协议问题 PKIX path building failed 解决办法

    该问题的解决办法   1.在请求前需要将证书导入,不推荐       2.绕开安全协议处理 下面的代码时一段http请求并且绕开安全协议.可直接使用 /** * * @param url 需要请求的网 ...

  3. linux command ------ watch

    watch命令以周期性的方式执行给定的指令,指令输出以全屏方式显示.watch是一个非常实用的命令,基本所有的Linux发行版都带有这个小工具,如同名字一样,watch可以帮你监测一个命令的运行结果, ...

  4. SQL存储过程例子

    存储过程呢,学校里学习的都是简单的.这里是我在工作的时候写的存储过程,贴出来,其中公司相关我都XXX代替了 (注:这个例子可以算是动态SQL的例子了,写死的是静态SQL,这个很灵活的传入参数的是动态S ...

  5. POJ-1459 Power Network(最大流)

    https://vjudge.net/problem/POJ-1459 题解转载自:優YoU http://user.qzone.qq.com/289065406/blog/1299339754 解题 ...

  6. uva 10625 Board Wrapping

    https://vjudge.net/problem/UVA-10652 给出n个长方形,用一个面积尽量小的凸多边形把他们围起来 求木板占包装面积的百分比 输入给出长方形的中心坐标,长,宽,以及长方形 ...

  7. jQuery总结或者锋利的jQuery笔记一

      在线测试脚本网站 层次 选择器要多花时间看看. 第一章: hover = enter+leave jQuery对象 jQuery产生的对象时jQuery独有的,只能自己调用 var $c=$(&q ...

  8. 一些CSS3的乐趣 - 工作也能发现乐的源头

    中秋节 translate 前些日子做一个中秋节的专题,主要就是写一个效果,月亮滚动,花瓣飘落.具体代码如下: .icons {z-index:10088; position:absolute; -w ...

  9. ant+sonar+jacoco代码质量代码覆盖率扫描

    使用ant构建的java web项目如何做sonar代码质量扫描?以下就是实际遇到并成功使用的案例一.做sonar扫描的准备工作    1.给web项目增加build.xml构建脚本.    2.下载 ...

  10. MongoDB 之 Array Object 的特殊操作 MongoDB - 6

    相比关系型数据库, Array [1,2,3,4,5] 和 Object { 'name':'DragonFire' } 是MongoDB 比较特殊的类型了 特殊在哪里呢?在他们的操作上又有什么需要注 ...