Codeforces Round #542 [Alex Lopashev Thanks-Round] (Div. 2)

题目链接https://codeforces.com/contest/1130

A. Be Positive

题意:

给出n个数,看是否正数的个数过半或者负数的个数过半。

题解:
水题,代码如下:

#include <bits/stdc++.h>
using namespace std;
const int N = ;
int n;
double a[N];
int main(){
ios::sync_with_stdio(false);cin.tie();
cin>>n;
int cnt1 = ,cnt2=;
for(int i=;i<=n;i++){
cin>>a[i];
if(a[i]>) cnt1++;
else if(a[i]<) cnt2++;
}
if(cnt1>=(n+)/) cout<<;
else if(cnt2>=(n+)/) cout<<-;
else cout<<;
return ;
}

B. Two Cakes

题意:

给出2*n个商店,每个商店有其序号1,2...n,每个序号两个商店共有。现在有两个人想要买东西,但只能按照序号来买,从1买到n。

他们一开始的位置在最左边,问移动的距离总和最小是多少。

题解:

记录一下序号和位置,然后贪心就行了。

具体见代码吧:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 2e5+;
int n;
struct Node{
int val,id;
bool operator < (const Node &A)const{
return val<A.val;
}
}a[N];
int main(){
ios::sync_with_stdio(false);cin.tie();
cin>>n;
for(int i=;i<=*n;i++){
cin>>a[i].val;
a[i].id=i;
}
sort(a+,a+*n+);
ll ans = ;
ans+=a[].id+a[].id-;
for(int i=;i<=*n;i+=){
ans+=min(abs(a[i].id-a[i-].id)+abs(a[i+].id-a[i-].id),abs(a[i].id-a[i-].id)+abs(a[i+].id-a[i-].id));
}
cout<<ans;
return ;
}

C. Connect

题意:

给出n*n的矩阵、起点以及终点,每个格子有0或者1,0代表陆地,1代表水。现在有个人想从起点走到终点,但他不能沾水。现在你可以修最多一条管道,连接两块陆地,费用为相应两点间距离的平方。问最终最小的费用为多少。

题解:

由于n最多只有50,所以可以直接采用很暴力的方法:先求出连通块,然后对起点和终点所在的连通块暴力枚举,最后求最小值。

代码如下:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = ;
int n,cnt;
int r1,c1,r2,c2;
char mp[N][N];
int vis[N][N],bel[N][N];
struct Node{
int x,y;
};
int dx[]={-,,,},dy[]={,,-,};
bool ok(int x,int y){
return x>=&&y>=&&x<=n&&y<=n&&mp[x][y]==''&&!vis[x][y];
}
void bfs(int x,int y,int t){
queue <Node> q;
q.push(Node{x,y});
vis[x][y]=;
while(!q.empty()){
Node now=q.front();q.pop();
int x=now.x,y=now.y;
bel[x][y]=t;
for(int i=;i<;i++){
int curx=x+dx[i],cury=y+dy[i];
if(ok(curx,cury)){
vis[curx][cury]=;
q.push(Node{curx,cury});
}
}
}
}
int dis(int x1,int y1,int x2,int y2){
return (x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);
}
int main(){
cin>>n>>r1>>c1>>r2>>c2;
for(int i=;i<=n;i++){
scanf("%s",mp[i]+);
}
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
if(mp[i][j]==''&&!vis[i][j]){
bfs(i,j,++cnt);
}
}
}
int block1=bel[r1][c1],block2=bel[r2][c2];
if(block1==block2){
cout<<;
return ;
}
int ans=0x3f3f3f3f;
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
if(mp[i][j]=='') continue ;
if(bel[i][j]==block1){
for(int p=;p<=n;p++){
for(int q=;q<=n;q++){
if(mp[p][q]=='') continue ;
if(bel[p][q]==block2){
ans=min(ans,dis(i,j,p,q));
}
}
}
}
}
}
cout<<ans;
return ;
}

D2. Toy Train

题意:

给出一个环,有一辆火车从某个位置出发,不断绕着环走。然后有m个糖果需要火车运送,每次火车在一个站只能装配一个糖果,但可以同时卸下多个糖果。

最后输出火车从所有位置出发,并且将所有的糖果都配送完的最小时间。

题解:

这题还是挺有意思的,如果考虑中间过程,那么这个题目将会变得很麻烦。

其实最终会发现,如果我们选定了最后一个需要运送的糖果,那么答案就是固定的。因此我们可以直接枚举火车运送最后一颗糖果的时候从哪里出发就行了。

这里最后维护答案的时候要取max,稍微想下就知道了。

代码如下:

#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
const int N = ;
int n,m;
vector <int> g[N];
int main(){
ios::sync_with_stdio(false);cin.tie();
cin>>n>>m;
for(int i=;i<=m;i++){
int u,v;
cin>>u>>v;
g[u].push_back(v);
}
for(int i=;i<=n;i++){
int ans = ,tot;
for(int j=;j<=n;j++){
int num = g[j].size();
if(num==) continue ;
tot=INF;
for(auto v:g[j]){
tot=min(tot,(num-)*n+(j-i+n)%n+(v-j+n)%n);
}
ans=max(ans,tot);
}
cout<<ans<<" ";
}
return ;
}

这个题还可以优化一波,就是不挨个从vector里面找,可以事先预处理一下从当前位置出发最短的距离是多少,然后根据这个来算就行了。

E. Wrong Answer

题意:

构造题,这里有一段代码:它只会记录和为非负数的一段数乘以其区间长度的最大值,但我们现在要求的是sum{ai}*(r-l+1),l<=i<=r,很明显这段代码是有错误的。

然后会输入一个k,你构造一组数据,使得正解和这段代码给出的答案相差k。最后输出你给出的数据。

题解:

这也是一个挺有意思的构造题吧,构造方法有很多,我说下我这个吧:

首先找到一个v,满足(k+v)%n==0,然后我们就想让我们构造出来的n个数的和为(k+v)/n,那么正解现在就应该是k+v了。

现在我们就只需要让有毒的代码得到v就行了。现在设出a,b两个数,其中a=v,那么(k+v)/n=a+b,这里我们算出b的值且b为负数就好了,那么最终的a,b就是我们需要构造的数。

具体构造方法为0,0,0,......b,a。这里一共有2000个数,b在前面可以使得有毒的代码得到a(也就是v),同时正确答案是k+v。那么此时就满足条件了。

代码如下:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int k,v,a,b;
int main(){
ios::sync_with_stdio(false);cin.tie();
cin>>k;
int n=;
v=;
while(){
int f1=,f2=;
if((k+v)%n==) f1=;
if(f1&&(k+v)/n-v<) f2=;
if(f1&&f2) break ;
v++;
}
a=v;
b=(k+v)/n-a;
cout<<n<<endl;
for(int i=;i<=n-;i++) cout<<<<" ";
cout<<b<<" "<<a;
return ;
}

Codeforces Round #542 [Alex Lopashev Thanks-Round] (Div. 2) 题解的更多相关文章

  1. Codeforces Round #542 [Alex Lopashev Thanks-Round] (Div. 1) C(二分+KMP)

    http://codeforces.com/contest/1129/problem/C #include<bits/stdc++.h> #define fi first #define ...

  2. Codeforces Round #542 [Alex Lopashev Thanks-Round] (Div. 2) A - D2

    A. Be Positive 链接:http://codeforces.com/contest/1130/problem/A 题意: 给一段序列,这段序列每个数都除一个d(−1e3≤d≤1e3)除完后 ...

  3. Codeforces Round #542 [Alex Lopashev Thanks-Round] (Div. 2)

    A. Be Positive 题意:给出一个数组 每个树去除以d(d!=0)使得数组中大于0的数 大于ceil(n/2) 求任意d 思路:数据小 直接暴力就完事了 #include<bits/s ...

  4. Codeforces Round #542 [Alex Lopashev Thanks-Round] (Div. 1)C. Morse Code

    题意:给你n个01字符,每次问你前缀的所有本质不同的子串,由摩斯密码组成的方案数和. 题解:离线处理,把字符建sam,通过topo序来dp计算每个节点表示的子串方案数的和.统计答案时,把n个字符挨个匹 ...

  5. Codeforces Round #542 [Alex Lopashev Thanks-Round] (Div. 1)

    A - Toy Train 很显然,一个站有多少个糖,那么就要从这个点运多少次.设第i个点有\(a_i\)个糖,那么就要转\(a_i-1\)圈,然后再走一段.很显然最后一段越小越好. 然后枚举起点后, ...

  6. Codeforces Round #542 [Alex Lopashev Thanks-Round] (Div. 1) 题解

    A. Toy Train 时间限制:2 seconds 内存限制:256 megabytes 题意 有编号111~n(n≤5000)n(n\le 5000)n(n≤5000)的车站顺时针呈环排列,有m ...

  7. Codeforces Round 542 (Div. 2)

    layout: post title: Codeforces Round 542 (Div. 2) author: "luowentaoaa" catalog: true tags ...

  8. Codeforces Round #182 (Div. 1)题解【ABCD】

    Codeforces Round #182 (Div. 1)题解 A题:Yaroslav and Sequence1 题意: 给你\(2*n+1\)个元素,你每次可以进行无数种操作,每次操作必须选择其 ...

  9. Codeforces Round #542 题解

    Codeforces Round #542 abstract I决策中的独立性, II联通块染色板子 IIIVoronoi diagram O(N^2 logN) VI环上距离分类讨论加取模,最值中的 ...

随机推荐

  1. Vue-cli 工具 / 通过 Vue-cli 工具重构 todoList

    本博文归纳在 Vue 学习过程中, Vue-cli 工具的使用说明.除此之外还通过 Vue-cli 工具将之前 Vuejs 基本语法当中实现的 todoList 进行重构. 安装 npm instal ...

  2. [转]Excel数据转化为sql脚本

    在实际项目开发中,有时会遇到客户让我们把大量Excel数据导入数据库的情况.这时我们就可以通过将Excel数据转化为sql脚本来批量导入数据库. 1 在数据前插入一列单元格,用来拼写sql语句. 具体 ...

  3. POJ 3028 Shoot-out(概率DP)

    Description This is back in the Wild West where everybody is fighting everybody. In particular, ther ...

  4. 【转】C++后台开发之我见

    工作也快两年了,偶然看到自己以前写过的一些技术博客,发现自己自毕业后一直没有更新过自己的技术博客,趁现在是刚过完春节快要回公司工作之际,谈谈我个人对后台开发的一些个人见解,希望能够对在校的学生或者刚刚 ...

  5. 会话模型与SSO

    关于会话模型其实网站已有很多帖子说明,其中有关于sessionid,cookie以及他们之间的关系,自己先了解吧 1 会话模型 会话模型是客户端和服务端交互的一种模型,会话模型友好的处理了客户端有无通 ...

  6. vue服务端渲染简单入门实例

    想到要学习vue-ssr的同学,自不必多说,一定是熟悉了vue,并且多多少少做过几个项目.然后学习vue服务端渲染无非解决首屏渲染的白屏问题以及SEO友好. 话不多说,笔者也是研究多日才搞明白这个服务 ...

  7. php添加扩展 在phpinfo能看到该扩展,但在cli用php -m 却看不到,为什么呢,求指教

    1. 没有出现的原因是:执行时添加上php.ini的文件就可以了    $ /usr/local/php/bin/php -c /usr/local/php/etc/php.ini -m | grep ...

  8. 解决XAMPP中,MYSQL因修改my.ini后,无法启动的问题

    论这世上谁最娇贵,不是每年只开七天的睡火莲,也不是瑞典的维多利亚公主,更不是一到冬天就自动关机的iPhone 6s, 这世上最娇贵的,非XAMPP中的mysql莫属,记得儿时的我,年少轻狂,当时因为m ...

  9. opencv图像像素值读取

    说到图像像素,肯定要先认识一下图像中的坐标系长什么样. 1. 坐标体系中的零点坐标为图片的左上角,X轴为图像矩形的上面那条水平线:Y轴为图像矩形左边的那条垂直线.该坐标体系在诸如结构体Mat,Rect ...

  10. 【EF】解决EF批量操作,Z.EntityFramework.Extensions 过期方案

    方案一: 使用EntityFramework.Extended优点: 启下载量是Z.EntityFramework.Extensions的10倍+ 不会过期缺点:不能批量Insert 方案二:解决批量 ...