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内核分析》第八周学习总结
<Linux内核分析>第八周学习总结 ——进程的切换和系统的一般执行过程 姓名:王玮怡 学号:20135116 ...
- 读书笔记(chapter4)
进程调度 4.1多任务 1.多任务系统可以划分为:非抢占式多任务和抢占式多任务: (在此模式下,由调度程序来决定什么时候停止一个进程的运行,以便其他进程能够得到执行机会,这个动作叫抢占: 时间片实际上 ...
- 转发:C#操作SQL Server数据库
转发自:http://www.cnblogs.com/rainman/archive/2012/03/13/2393975.html 1.概述 2.连接字符串的写法 3.SqlConnection对象 ...
- Sprint 冲刺第三阶段第6-10天
这几天一直都在整理我们之前的内容,检查会不会有细节问题.例如界面跳转.颜色等. 因为一直没办法找到guitub存放位置.于是在这里存放一些主代码. MainActivity.java package ...
- tensorflow在windows下的安装
1.python 的安装 这里我选择的是Anaconda4.2,附上下载链接https://www.continuum.io/downloads 2.测试python安装是否成功 在cmd中输入pyt ...
- IE下JS保存图片
function ieSave() { var img = document.images[0]; ...
- centos7切换gnome3桌面与gnome经典桌面
登陆界面选择设置按钮,选择gnome,进行登陆
- [IOI2018]会议——分治+线段树
题目链接: [IOI2018]meetings 题目大意:有$n$座山峰,每座山峰有一个高度,有$q$次询问,每次需要确定一个开会山峰使$[l,r]$所有山峰上的人都前往开会山峰,一个山峰的人去开会的 ...
- Studio启动的时候报错 Could not install Gradle distribution from
安装了studio以后,直接点击[Start]报如下错,绝对不是网络的问题. Could not install Gradle distribution from 'https://services. ...
- MT【54】一道二次函数问题的几何意义
[Rather less, but better.]----卡尔·弗里德里希·高斯(1777-1855) (2016诸暨质检18)已知$f(x)=x^2-a|x-1|+b(a>0,b>-1 ...