【CF625E】Frog Fights(模拟)
【CF625E】Frog Fights(模拟)
题面
翻译:
有\(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(模拟)的更多相关文章
- CF625E Frog Fights
有\(n\)只青蛙在一个长度为\(m\)的环上打架:每只青蛙有一个初始位置\(p_i\),和一个跳跃数值\(a_i\).从\(1\)号青蛙开始按序号循环行动,每次若第\(i\)只青蛙行动,则它会向前跳 ...
- Codeforces Round #342 (Div. 2) E. Frog Fights set 模拟
E. Frog Fights 题目连接: http://www.codeforces.com/contest/625/problem/E Description stap Bender recentl ...
- Codeforces Round #342 (Div 2) 解题报告
除夕夜之有生之年CF第一场 下午从奶奶家回到姥姥家,一看还有些时间,先吃点水果陪姥姥姥爷聊了会儿,再一看表,5:20....woc已经开场20分钟了...于是抓紧时间乱搞.. **A. Guest F ...
- 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 ...
- 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 ...
- Mr. Frog’s Game(模拟连连看)
Description One day, Mr. Frog is playing Link Game (Lian Lian Kan in Chinese). In this game, if you ...
- POJ - 1054 The Troublesome Frog 模拟 枚举优化。
题意:有个R*C的格网.上面有若干个点,这些点可以连成一些直线,满足:这些点在直线上均匀排布(也就是间隔相等),直线的两段穿过网格(也就是第一个,最后一个在网格的边界附近) 求某条直线上最多的点数 题 ...
- hdu-5929 Basic Data Structure(双端队列+模拟)
题目链接: Basic Data Structure Time Limit: 7000/3500 MS (Java/Others) Memory Limit: 65536/65536 K (Ja ...
- HDU 5918 KMP/模拟
Sequence I Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total ...
随机推荐
- arcpy示范教学(一):基本操作
arcpy基本操作 打开目录,遍历目录,打开要素类,遍历要素,打开文件,写入属性值 import arcpy import codecs # 设置工作目录 arcpy.env.workspace = ...
- tp框架-------验证码
验证码我们一般很常见,在注册或登录时,都可以用的到,下面我们就来看看它的代码和用法 加验证码是为了防止表单攻击的一种方式,为了我们的程序更加的安全 在tp框架中它自带了一个验证码的类,我们先来看一下 ...
- 优化 VR 动作类游戏《Space Pirate Trainer*》以便在英特尔® 集成显卡上实现卓越的表现
Space Pirate Trainer* 是一款面向 HTC Vive*.Oculus Touch* 和 Windows Mixed Reality* 的原创发行游戏.版本 1.0 于 2017 年 ...
- 译 - Cassandra 数据建模的基本规则
Basic Rules of Cassandra Data Modeling 原文地址:http://www.datastax.com/dev/blog/basic-rules-of-cassandr ...
- 5 种使用 Python 代码轻松实现数据可视化的方法
数据可视化是数据科学家工作中的重要组成部分.在项目的早期阶段,你通常会进行探索性数据分析(Exploratory Data Analysis,EDA)以获取对数据的一些理解.创建可视化方法确实有助于使 ...
- 使用Scrapy构建一个网络爬虫
记得n年前项目需要一个灵活的爬虫工具,就组织了一个小团队用Java实现了一个爬虫框架,可以根据目标网站的结构.地址和需要的内容,做简单的配置开发,即可实现特定网站的爬虫功能.因为要考虑到各种特殊情形, ...
- 用了这么多年的MCU,你知道哪些MCU原厂最牛?
单片机诞生于1971年,经历了SCM.MCU.SoC三大阶段.单片机由以前的1位.4位.8位.16位,发展到现在的32位甚至64位. 90年代后随着消费电子产品大发展,单片机技术得到了巨大提高,相继诞 ...
- PHP中的闭包详解
PHP闭包(Closure)使用详解 作者: 字体:[增加 减小] 类型:转载 时间:2013-05-02我要评论 本篇文章介绍了,PHP闭包(Closure)的使用介绍,需要的朋友参考下 不知不 ...
- 软工 · BETA 版冲刺前准备(团队)
软工 · BETA 版冲刺前准备(团队) 过去存在的问题 组员之间缺乏沟通,前后端缺乏沟通协作 组员积极性不高 基础知识不够扎实 手动整合代码效率过低 我们已经做了哪些调整/改进 通过会议加强组员之间 ...
- a6
组员:陈锦谋 今日内容: 界面按钮.icon制作,PS学习 明日计划: 继续 困难: 时间不多吧,今天主要电气实践