Educational Codeforces Round 42 (Rated for Div. 2) E. Byteland, Berland and Disputed Cities
http://codeforces.com/contest/962/problem/E
2 seconds
256 megabytes
standard input
standard output
The cities of Byteland and Berland are located on the axis OxOx. In addition, on this axis there are also disputed cities, which belong to each of the countries in their opinion. Thus, on the line OxOx there are three types of cities:
- the cities of Byteland,
- the cities of Berland,
- disputed cities.
Recently, the project BNET has been launched — a computer network of a new generation. Now the task of the both countries is to connect the cities so that the network of this country is connected.
The countries agreed to connect the pairs of cities with BNET cables in such a way that:
- If you look at the only cities of Byteland and the disputed cities, then in the resulting set of cities, any city should be reachable from any other one by one or more cables,
- If you look at the only cities of Berland and the disputed cities, then in the resulting set of cities, any city should be reachable from any other one by one or more cables.
Thus, it is necessary to choose a set of pairs of cities to connect by cables in such a way that both conditions are satisfied simultaneously. Cables allow bi-directional data transfer. Each cable connects exactly two distinct cities.
The cost of laying a cable from one city to another is equal to the distance between them. Find the minimum total cost of laying a set of cables so that two subsets of cities (Byteland and disputed cities, Berland and disputed cities) are connected.
Each city is a point on the line OxOx. It is technically possible to connect the cities aa and bb with a cable so that the city cc (a<c<ba<c<b) is not connected to this cable, where aa, bb and cc are simultaneously coordinates of the cities aa, bb and cc.
The first line contains a single integer nn (2≤n≤2⋅1052≤n≤2⋅105) — the number of cities.
The following nn lines contains an integer xixi and the letter cici (−109≤xi≤109−109≤xi≤109) — the coordinate of the city and its type. If the city belongs to Byteland, cici equals to 'B'. If the city belongs to Berland, cici equals to «R». If the city is disputed, cici equals to 'P'.
All cities have distinct coordinates. Guaranteed, that the cities are given in the increasing order of their coordinates.
Print the minimal total length of such set of cables, that if we delete all Berland cities (cici='R'), it will be possible to find a way from any remaining city to any other remaining city, moving only by cables. Similarly, if we delete all Byteland cities (cici='B'), it will be possible to find a way from any remaining city to any other remaining city, moving only by cables.
4
-5 R
0 P
3 P
7 B
12
5
10 R
14 B
16 B
21 R
32 R
24
In the first example, you should connect the first city with the second, the second with the third, and the third with the fourth. The total length of the cables will be 5+3+4=125+3+4=12.
In the second example there are no disputed cities, so you need to connect all the neighboring cities of Byteland and all the neighboring cities of Berland. The cities of Berland have coordinates 10,21,3210,21,32, so to connect them you need two cables of length 1111 and 1111. The cities of Byteland have coordinates 1414 and 1616, so to connect them you need one cable of length 22. Thus, the total length of all cables is 11+11+2=2411+11+2=24.
思路:
第一感觉,就是把所有的R与P链接起来,然后在把B连接起来,遇到p时,p与p之间的距离就不算了,可是如果是PRP这种还要不要算呢?看来我还需要再读一遍题。
嗯,读题完毕!顺便说一句,上一题,也就是D题,是个傻逼题,只不过我这个傻逼比它更傻逼,所以没有做出来。对于这题,PRP这种结构,连接B时,P与P还是要再连接一次;感觉应该不是很难写,两个遍历时间也就是2*n,也就是4*1e5,应该跑的完(题目的2s让我有些害怕),数据大小达到了1e9,应该是要long long的,结果我想用unsigned long long来存,好吧,就是它了!
#include<iostream>
using namespace std;
struct node
{
int x;
char p;
}a[200086];
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i].x>>a[i].p;
}
unsigned long long ans=0;
for(int i=1;i<n;i++){
if(a[i].p==a[i-1].p&&(a[i].p=='R'||a[i].p=='P')){ans+=(a[i].x-a[i-1].x);}
else if(a[i].p=='P'&&a[i-1].p=='R'){ans+=(a[i].x-a[i-1].x);}
else if(a[i].p=='R'&&a[i-1].p=='P'){ans+=(a[i].x-a[i-1].x);}
}
for(int i=1;i<n;i++){
if(a[i].p==a[i-1].p&&a[i].p=='B'){ans+=(a[i].x-a[i-1].x);}
else if(a[i].p=='P'&&a[i-1].p=='B'){ans+=(a[i].x-a[i-1].x);}
else if(a[i].p=='B'&&a[i-1].p=='P'){ans+=(a[i].x-a[i-1].x);}
}
cout<<ans<<endl;
}
没有考虑有敌国拦在中间的情况,真是该打!
写了老半天,还是wa了,但是我的代码是没有问题的,是我把题目理解错了
#include<iostream>
#include<cstdio>
using namespace std;
struct node
{
int x;
char p;
}r[150000],b[150000],s[150000];
int main()
{
int n;
int tr,tb;cin>>n;
//cout<<"n="<<n<<endl;
tr=tb=0;
for(int i=0;i<n;i++){
//cout<<i<<endl;
scanf("%d %c",&s[i].x,&s[i].p);
if(s[i].p=='R'){r[tr++]=s[i];}
else if(s[i].p=='B'){b[tb++]=s[i];}
else if(s[i].p=='P'){r[tr++]=s[i];b[tb++]=s[i];}
}
unsigned long long ans;
ans=0;
for(int i=1;i<tr;i++){
ans+=(r[i].x-r[i-1].x);
}
for(int i=1;i<tb;i++){
ans+=(b[i].x-b[i-1].x);
}
for(int i=1;i<n;i++){
if(s[i].p==s[i-1].p&&s[i].p=='P'){
ans-=(s[i].x-s[i-1].x);
}
}
cout<<ans<<endl;
}
Educational Codeforces Round 42 (Rated for Div. 2) E. Byteland, Berland and Disputed Cities的更多相关文章
- Educational Codeforces Round 42 (Rated for Div. 2) E. Byteland, Berland and Disputed Cities(贪心)
E. Byteland, Berland and Disputed Cities time limit per test2 seconds memory limit per test256 megab ...
- Educational Codeforces Round 42 (Rated for Div. 2) D. Merge Equals
http://codeforces.com/contest/962/problem/D D. Merge Equals time limit per test 2 seconds memory lim ...
- Educational Codeforces Round 42 (Rated for Div. 2)F - Simple Cycles Edges
http://codeforces.com/contest/962/problem/F 求没有被两个及以上的简单环包含的边 解法:双联通求割顶,在bcc中看这是不是一个简单环,是的话把整个bcc的环加 ...
- Educational Codeforces Round 42 (Rated for Div. 2) C
C. Make a Square time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...
- Educational Codeforces Round 42 (Rated for Div. 2) B
B. Students in Railway Carriage time limit per test 2 seconds memory limit per test 256 megabytes in ...
- Educational Codeforces Round 42 (Rated for Div. 2) A
A. Equator time limit per test 2 seconds memory limit per test 256 megabytes input standard input ou ...
- D. Merge Equals(from Educational Codeforces Round 42 (Rated for Div. 2))
模拟题,运用强大的stl. #include <iostream> #include <map> #include <algorithm> #include < ...
- Educational Codeforces Round 42 (Rated for Div. 2)
A. Equator(模拟) 找权值的中位数,直接模拟.. 代码写的好丑qwq.. #include<cstdio> #include<cstring> #include< ...
- C Make a Square Educational Codeforces Round 42 (Rated for Div. 2) (暴力枚举,字符串匹配)
C. Make a Square time limit per test2 seconds memory limit per test256 megabytes inputstandard input ...
随机推荐
- linux-shell-引用-命令替换-命令退出状态-逻辑操作符
命令替换:bash7步扩展的之一 嵌套 这里没什么意义 退出状态可以参与逻辑判断 表达式 算数表达式和条件表达式,逻辑表达式 查看passwd命令比,避免用户捕获输入密码的接口 这种方式就可以直接输 ...
- linux-shell-命令总结
第一种方法执行: 第二种方法执行: 第三种方法执行: 第四种方法:执行 第三种和第四种方法都是在新的进程里执行程序 函数方法 方法就是一个命令,命令写在字符串的第一个位置 type:可以接外部命令 ...
- git使用(2)
1.远程仓库 a SSHKEY 第1步:创建SSH Key.在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到 ...
- 个人博客Week3——案例分析
一.调研,评测 我使用的bing的WINDOWS客户端,其大致分为四个模块:词典.例句.翻译.应用. (1)“词典”模块 BUG:搜索”http“词条,界面显示http的相关,但是无法再回到最初的主界 ...
- linux内核分析实践二学习笔记
Linux实践二--内核模块的编译 标签(空格分隔): 20135328陈都 理解内核的作用 Linux内核[kernel]是整个操作系统的最底层,它负责整个硬件的驱动,以及提供各种系统所需的核心功能 ...
- shell脚本--显示文本内容
shell脚本显示文本内容及相关的常用命令有cat.more.less.head.tail.nl 首先是cat,cat最常用的就是一次性显示文件的所有内容,如果一个文件的内容很多的话,那么就不是很方便 ...
- MySQL基础~~表结构操作
登录数据库服务器 mysql -h127.0.0.1 -uroot -p123456 创建数据库 create database test; 显示所有数据库 show databases; 指定要操作 ...
- [转帖]召冠总的 Oracle常用的性能诊断语句. --保存学习备查
Copyfrom https://www.cnblogs.com/zhaoguan_wang --1.阻塞及等待事件信息查询-- 查询所有会话的状态.等待类型及当前正在执行的SQL脚本select t ...
- PP学习笔记-业务基础
生产主数据.生产计划.生产订单与生产执行 生产模块主要子模块及功能:PP-BD 基本数据管理 PP-SFC车间订单管理 PP-MRP物料需求计划 PP-MPS主生产计划 PP-CRP能力计划 PP-I ...
- String()与toString的区别
1..toString()可以将所有的的数据都转换为字符串,但是要排除null 和 undefined 代码示例: var a = null.toString()--报错 var b = underf ...