题目链接:

https://codeforces.com/gym/102082

题意:

在一个客车里面有$r$排座位,每排座位有$2s$个座位,中间一条走廊

有$p$个人在车内,求出所有人走出客车的最短时间

数据范围:

$1\leq r\leq 500$

$1\leq s\leq 500$

$1\leq p\leq 2sp$

分析:

一道全场题,居然想了三个小时,我也是醉了。

解法一:模拟每秒他们的动作。如果有多个人下一秒要走向同一个位置,他们任何一个人走上去都行。重点是,这样的复杂度是$O(s^2n^2)$,但是可以发现在1000秒以后,他们所有的人一定紧贴着。所以以后每秒走出一个人,也就是说,可以停止模拟,直接得到答案(这是我比赛的时候想到的)

解法二:逆处理(orz),想让他们都出去,然后一个一个的放进去。所有的阻挡都在入口了。算出每个人就位的最长时间

解法三:算出每个人出来的时间(无人阻挡),然后每秒出去一个人,如果同一秒有多人,那么任意一个人出去,其它的人加在下一秒

ac代码:

解法一:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=500+10;
const int maxm=1e7+10;
const int mod=1e9+7;
int r,s,p,ans;
int ma[maxn][2*maxn]; void mov()
{
if(ma[r][s+1])ma[r][s+1]=0,p--;
for(int i=r;i>=1;i--)
{
if(ma[i][s+1]&&ma[i+1][s+1]==0)ma[i+1][s+1]=1,ma[i][s+1]=0;
for(int j=s;j>=1;j--)
if(ma[i][j+1]==0&&ma[i][j])ma[i][j]=0,ma[i][j+1]=1;
for(int j=s+2;j<=2*s+1;j++)
if(ma[i][j-1]==0&&ma[i][j])ma[i][j-1]=1,ma[i][j]=0;
}
}
int main()
{
scanf("%d %d %d",&r,&s,&p);
for(int i=1;i<=p;i++)
{
int x,y;
scanf("%d %d",&x,&y);
if(y>s)y++;
ma[x][y]=1;
}
while(p)
{
ans++;
mov();
if(ans>=1000)break;
}
printf("%d\n",ans+p);
return 0;
}

解法二:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=500+10;
const int maxm=1e7+10;
const int mod=1e9+7;
int r,s,p,ans;
int num[maxn*maxn*2];
int main()
{
scanf("%d %d %d",&r,&s,&p);
for(int i=1;i<=p;i++)
{
int x,y;
scanf("%d %d",&x,&y);
if(y>s)y++;
num[i]=abs(s+1-y)+abs(r+1-x);
//cout<<num[i]<<endl;
}
sort(num+1,num+1+p);
int ans=0;
for(int i=p;i>=1;i--)
ans=max(p-i+num[i],ans);
cout<<ans<<endl;
return 0;
}

解法三:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=500+10;
const int maxm=1e7+10;
const int mod=1e9+7;
int r,s,p,ans;
int num[maxn*maxn*2];
int main()
{
scanf("%d %d %d",&r,&s,&p);
for(int i=1;i<=p;i++)
{
int x,y;
scanf("%d %d",&x,&y);
if(y>s)y++;
num[abs(s+1-y)+abs(r+1-x)]++;
//cout<<num[i]<<endl;
}
// sort(num+1,num+1+p);
int ans=0;
for(int i=1;i<maxn*maxn*2;i++)
{
if(num[i])
ans=max(i,ans);
if(num[i]>=2)num[i+1]+=num[i]-1;
}
cout<<ans<<endl;
return 0;
}

  

codeforces gym #102082C Emergency Evacuation(贪心Orz)的更多相关文章

  1. Codeforces Gym 100002 E "Evacuation Plan" 费用流

    "Evacuation Plan" Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/10 ...

  2. Codeforces Gym 100269E Energy Tycoon 贪心

    题目链接:http://codeforces.com/gym/100269/attachments 题意: 有长度为n个格子,你有两种操作,1是放一个长度为1的东西上去,2是放一个长度为2的东西上去 ...

  3. codeforces Gym 100338E Numbers (贪心,实现)

    题目:http://codeforces.com/gym/100338/attachments 贪心,每次枚举10的i次幂,除k后取余数r在用k-r补在10的幂上作为候选答案. #include< ...

  4. Codeforces Gym 100203E E - bits-Equalizer 贪心

    E - bits-EqualizerTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest ...

  5. CodeForces Gym 100685I Innovative Business (贪心)

    题意:给定一条路的长和宽,然后给你瓷砖的长和宽,你只能横着或者竖着铺,也可以切成片,但是每条边只能对应一条边,问你最少要多少瓷砖. 析:先整块整块的放,然后再考虑剩下部分,剩下的再分成3部分,先横着, ...

  6. ICPC 2018 亚洲横滨赛 C Emergency Evacuation(暴力,贪心)

    ICPC 2018 亚洲横滨赛 C Emergency Evacuation 题目大意 你一个车厢和一些人,这些人都坐在座位上,求这些人全部出去的时间最小值 Solution 题目咋说就咋做 直接模拟 ...

  7. Codeforces GYM 100876 J - Buying roads 题解

    Codeforces GYM 100876 J - Buying roads 题解 才不是因为有了图床来测试一下呢,哼( 题意 给你\(N\)个点,\(M\)条带权边的无向图,选出\(K\)条边,使得 ...

  8. Codeforces Gym 101252D&&floyd判圈算法学习笔记

    一句话题意:x0=1,xi+1=(Axi+xi%B)%C,如果x序列中存在最早的两个相同的元素,输出第二次出现的位置,若在2e7内无解则输出-1. 题解:都不到100天就AFO了才来学这floyd判圈 ...

  9. Codeforces Gym 101190M Mole Tunnels - 费用流

    题目传送门 传送门 题目大意 $m$只鼹鼠有$n$个巢穴,$n - 1$条长度为$1$的通道将它们连通且第$i(i > 1)$个巢穴与第$\left\lfloor \frac{i}{2}\rig ...

随机推荐

  1. Django 系列博客(十一)

    Django 系列博客(十一) 前言 本篇博客介绍使用 ORM 来进行多表的操作,当然重点在查询方面. 创建表 实例: 作者模型:一个作者有姓名和年龄. 作者详细模型:把作者的详情放到详情表,包含生日 ...

  2. .Net语言 APP开发平台——Smobiler学习日志:在手机应用开发中如何快速调用电话拨打功能

    样式一 一.目标样式 我们要实现上图中的效果,需要如下的操作: 1.从工具栏上的”Smobiler Components”拖动一个PhoneButton控件到窗体界面上 2.修改PhoneButton ...

  3. 树莓派3B+通过路由器进SSH和VNC

    1.打开树莓派官网 www.raspberrypi.org 选择 ”Raspbian Stretch with desktop and recommended software“ 并下载 镜像包含推荐 ...

  4. 【转载】 C#检测输入的内容中是否含有中文

    在C#开发中,可以结合正则表达式,来检测输入的内容中是否包含中文,Regex类是C#中有关正则表达式处理的相关类,功能强大,我们只需要设置好规则,即可很快检测出输入的字符串内容中是否含有中文信息. R ...

  5. 纯CSS实现点击事件展现隐藏div菜单列表/元素切换

    在写移动端导航的时候经常用到点击按钮出现/隐藏导航条的情况,最常见的方法当然还是前端框架直接调用,省心省力,不易出错:当然还有使用纯JS实现的小代码段.我这里整理了纯CSS实现方式,给需要的人和给自己 ...

  6. mac IDE输入光标变成块状 改为竖线

    mac下安装IDE后,出现“输入光标变成块状”的情况,是因为安装的时候装了ideaVim插件,改为竖线光标的方法:把ideaVim插件去掉

  7. 单元测试_JUnit常用单元测试注解介绍及代码演示

    JUnit常用单元测试注解介绍及代码演示   by:授客 QQ:1033553122 1. 测试环境 1 2. 基础概念 1 3. 常用Annotation 1 4. 运行环境配置 3 maven配置 ...

  8. react基础语法二

    这里只是对自己的学习进行一次总结,也是为了让自己以后如果长时间不使用快速记忆起来的笔记,如果想要学习,还是去官网看文档比较好一些.. 注意 下面的代码的 script标签的type类型都为 “text ...

  9. Docker 创建 Confluence6.12.2 中文版

    目录 目录 1.介绍 1.1.什么是Confluence? 2.Confluence的官网在哪里? 3.如何下载安装? 4.对 Confluence 进行配置 4.1.设置 Confluence 4. ...

  10. C# 一般处理程序ashx接收服务端post过来json数据

    这个和前端js的接收方式有点不一样,前端接收用request.form["xxx"]即可