【CF625E】Frog Fights(模拟)

题面

CF

洛谷

翻译:

有\(n\)只青蛙在一个被分为了\(m\)等分的圆上,对于每份顺时针依次标号。

初始时每只青蛙所在的位置是\(p_i\),速度是\(a_i\)。

然后从\(1\)号青蛙开始,顺次移动,每只青蛙顺时针移动\(a_i\)个格子。

途中碰到的所有青蛙都会被他淘汰。

如果它淘汰了\(x\)只青蛙,那么它的速度会变为\(a_i-x\)

求最终剩下的青蛙数量以及编号。

题解

发现在没有淘汰的情况下,所有青蛙的相对位置是不会发生变化的。

那么,我们按照所有青蛙所在的位置依次排序,计算一下它淘汰前面那只青蛙的时间。

把所有的这个时间全部丢到\(set\)里面去。

每次显然是把时间最小的那次淘汰给从\(set\)中取出来,

淘汰对应的青蛙,并且更新一下状态就好了。

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<set>
#include<map>
#include<vector>
#include<queue>
using namespace std;
#define ll long long
#define RG register
#define MAX 111111
#define inf 1e9
inline int read()
{
RG int x=0,t=1;RG char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=-1,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return x*t;
}
int p[MAX],a[MAX],n,m,q[MAX],nt[MAX],lt[MAX];
set<pair<int,int> >S;
bool cmp(int a,int b){return p[a]<p[b];}
int calc(int x,int y)
{
if(x==y)return inf;
int d=(p[y]-p[x]+m)%m;
if(y<x)d=(d+a[y])%m;
if(d<=a[x])return 1;
if(a[x]<=a[y])return inf;
return (d-a[y]-1)/(a[x]-a[y])+1;
}
int main()
{
n=read();m=read();
for(int i=1;i<=n;++i)p[i]=read()-1,a[i]=read(),q[i]=i;
sort(&q[1],&q[n+1],cmp);
for(int i=1;i<=n;++i)nt[q[i]]=q[i+1],lt[q[i]]=q[i-1];
nt[q[n]]=q[1];lt[q[1]]=q[n];
for(int i=1;i<=n;++i)S.insert(make_pair(calc(i,nt[i]),i));
while(233)
{
pair<int,int> u=*S.begin();if(u.first==inf)break;
int v=u.second;S.erase(S.begin());
S.erase(make_pair(calc(nt[v],nt[nt[v]]),nt[v]));
if(!S.empty())S.erase(make_pair(calc(lt[v],v),lt[v]));
p[v]+=u.first;p[v]%=m;--a[v];
nt[v]=nt[nt[v]];lt[nt[v]]=v;
S.insert(make_pair(calc(lt[v],v),lt[v]));
S.insert(make_pair(calc(v,nt[v]),v));
}
printf("%d\n",S.size());
for(set<pair<int,int> >::iterator it=S.begin();it!=S.end();++it)printf("%d ",it->second);
puts("");return 0;
}

【CF625E】Frog Fights(模拟)的更多相关文章

  1. CF625E Frog Fights

    有\(n\)只青蛙在一个长度为\(m\)的环上打架:每只青蛙有一个初始位置\(p_i\),和一个跳跃数值\(a_i\).从\(1\)号青蛙开始按序号循环行动,每次若第\(i\)只青蛙行动,则它会向前跳 ...

  2. Codeforces Round #342 (Div. 2) E. Frog Fights set 模拟

    E. Frog Fights 题目连接: http://www.codeforces.com/contest/625/problem/E Description stap Bender recentl ...

  3. Codeforces Round #342 (Div 2) 解题报告

    除夕夜之有生之年CF第一场 下午从奶奶家回到姥姥家,一看还有些时间,先吃点水果陪姥姥姥爷聊了会儿,再一看表,5:20....woc已经开场20分钟了...于是抓紧时间乱搞.. **A. Guest F ...

  4. HDU 5926 Mr. Frog's Game 【模拟】 (2016CCPC东北地区大学生程序设计竞赛)

    Mr. Frog's Game Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)T ...

  5. HDU 5924 Mr. Frog’s Problem 【模拟】 (2016CCPC东北地区大学生程序设计竞赛)

    Mr. Frog's Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Other ...

  6. Mr. Frog’s Game(模拟连连看)

    Description One day, Mr. Frog is playing Link Game (Lian Lian Kan in Chinese). In this game, if you ...

  7. POJ - 1054 The Troublesome Frog 模拟 枚举优化。

    题意:有个R*C的格网.上面有若干个点,这些点可以连成一些直线,满足:这些点在直线上均匀排布(也就是间隔相等),直线的两段穿过网格(也就是第一个,最后一个在网格的边界附近) 求某条直线上最多的点数 题 ...

  8. hdu-5929 Basic Data Structure(双端队列+模拟)

    题目链接: Basic Data Structure Time Limit: 7000/3500 MS (Java/Others)    Memory Limit: 65536/65536 K (Ja ...

  9. HDU 5918 KMP/模拟

    Sequence I Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

随机推荐

  1. 八、EnterpriseFrameWork框架基础功能之自定义报表

    本章写关于框架中的“自定义报表”,类似上章“字典管理”也是三部分功能组成,包括配置报表.对报表按角色授权.查看报表:其核心思想就是实现新增一个报表而不用修改程序代码.不用升级,只需要编写一个存储过程, ...

  2. Gradle快速上手——从Maven到Gradle

    [本文写作于2018年7月5日] 本文适合于有一定Maven应用基础,想快速上手Gradle的读者. 背景 Maven.Gradle都是著名的依赖管理及自动构建工具.提到依赖管理与自动构建,其重要性在 ...

  3. We are writing to let you know we have removed your selling privileges

     Hello, We are writing to let you know we have removed your selling privileges, canceled your listin ...

  4. redis rdb aof比较

    Redis中数据存储模式有2种:cache-only,persistence; cache-only即只做为“缓存”服务,不持久数据,数据在服务终止后将消失,此模式下也将不存在“数据恢复”的手段,是一 ...

  5. Bate版本控制报告

    报告beta阶段2周中,项目的版本控制情况,不包括未在coding.net的部分. 包括不限于:check in (不是push)次数; 总词数为29次 check in log(时间.人员.mess ...

  6. java 中的 i=i++

    记得大学刚开始学C语言时,老师就说:自增有两种形式,分别是i++和++i,i++表示的是先赋值后加1,++i是先加1后赋值,这样理解了很多年也没出现问题,直到遇到如下代码,我才怀疑我的理解是不是错了: ...

  7. 第六章 过滤器Filter

    Filter概述 Filter不用于客户端请求,只用于对request,response进行修改或对context,session,request事件进行监听. 1.概述 如上图,多个filter组成 ...

  8. Python入门:认识变量和字符串

    几个月前,我开始学习个人形象管理,从发型.妆容.服饰到仪表仪态,都开始做全新改造,在塑造个人风格时,最基础的是先了解自己属于哪种风格,然后找到参考对象去模仿,可以是自己欣赏的人.明星或模特等,直至最后 ...

  9. php反射机制应用

    用来获取指定的类的信息,包括类中的属性,方法,方法权限,注释等 用途:1.thinkPHP框架中的前置,后置控制器的实现 2.与debug_backtrace函数结合使用,文件调用的权限管理 使用方法 ...

  10. SpringMVC源码剖析(五)-消息转换器HttpMessageConverter

    原文链接:https://my.oschina.net/lichhao/blog/172562 #概述 在SpringMVC中,可以使用@RequestBody和@ResponseBody两个注解,分 ...