【题目链接】 http://acm.hdu.edu.cn/showproblem.php?pid=6136

【题目大意】

  一堆人在操场上跑步,他们都有一定的速度和初始位置,
  当两个人相遇的时候编号较小的就会出局,当场上剩下最后一个人的时候游戏结束,
  问时长为多少

【题解】

  我们发现每次发生碰撞的一定是相邻的两个人,
  所以我们找出相邻关系中最先发生碰撞的,将碰撞失败的那个人删除,
  之后继续这个过程,
  按照上述的做法我们建立一个循环链表,把所有人串起来,
  当发生淘汰的时候把那个人从循环链表中删去即可,
  用优先队列维护相邻关系,每次出队最小相遇时间即可。

【代码】

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <queue>
using namespace std;
const int N=100010,INF=0x3f3f3f3f;
struct data{int d,v,pw;}p[N];
bool cmp(data a,data b){return a.d<b.d;}
int T,Del[N],n,L,nxt[N],pre[N];
struct Frac{
int Den,Num;
Frac(){}
Frac(int _Num,int _Den){Den=_Den;Num=_Num;}
bool operator <(const Frac &rhs)const{return 1LL*Num*rhs.Den<1LL*rhs.Num*Den;}
};
Frac Cal(data a,data b){
int V=b.v-a.v,D=a.d-b.d;
if(D<0)D+=L; if(V<0)V=-V,D=L-D;
if(V==0)return Frac(INF,1);
int GCD=__gcd(V,D);
return Frac(D/GCD,V/GCD);
}
struct Relt{
int a,b;Frac t;
Relt(){}
Relt(int _a,int _b,Frac _t){a=_a;b=_b;t=_t;}
bool operator < (const Relt &x)const{return x.t<t;}
};
priority_queue<Relt> Q;
void Out(int x){
Del[x]=1;
nxt[pre[x]]=nxt[x];
pre[nxt[x]]=pre[x];
Q.push(Relt(pre[x],nxt[x],Cal(p[pre[x]],p[nxt[x]])));
}
int main(){
scanf("%d",&T);
while(T--){
scanf("%d%d",&n,&L);
memset(Del,0,sizeof(Del));
for(int i=0;i<n;i++)scanf("%d",&p[i].d),p[i].pw=i;
for(int i=0;i<n;i++)scanf("%d",&p[i].v);
sort(p,p+n,cmp); while(!Q.empty())Q.pop();
for(int i=0;i<n;i++){
nxt[i]=(i+1)%n; pre[i]=(i-1+n)%n;
Q.push(Relt(i,nxt[i],Cal(p[i],p[nxt[i]])));
}int Lft=n; Frac Ans;
while(Q.size()){
Relt x=Q.top(); Q.pop();
if(Del[x.a]||Del[x.b])continue;
if(--Lft==1){Ans=x.t;break;}
if(p[x.a].pw>p[x.b].pw)Out(x.b);
else Out(x.a);
}printf("%d/%d\n",Ans.Num,Ans.Den);
}return 0;
}

HDU 6136 Death Podracing(循环链表)的更多相关文章

  1. HDU 6136 Death Podracing (堆)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=6136 题解 完了,普及题都不会做了... 发现一个重要性质是只有相邻的人才会相撞,于是直接拿堆维护即可 ...

  2. HDU 5860 Death Sequence(死亡序列)

    p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: Calibri; font-s ...

  3. HDU 5860 Death Sequence(递推)

    HDU 5860 Death Sequence(递推) 题目链接http://acm.split.hdu.edu.cn/showproblem.php?pid=5860 Description You ...

  4. 2016 Multi-University Training Contest 10 || hdu 5860 Death Sequence(递推+单线约瑟夫问题)

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5860 题目大意:给你n个人排成一列编号,每次杀第一个人第i×k+1个人一直杀到没的杀.然后 ...

  5. hdu 5860 Death Sequence(递推+脑洞)

    Problem Description You may heard of the Joseph Problem, the story comes from a Jewish historian liv ...

  6. HDU 5860 Death Sequence

    用线段树可以算出序列.然后o(1)询问. #pragma comment(linker, "/STACK:1024000000,1024000000") #include<c ...

  7. 字符串(AC自动机):HDU 5129 Yong Zheng's Death

    Yong Zheng's Death Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 512000/512000 K (Java/O ...

  8. HDU 5129 Yong Zheng's Death

    题目链接:HDU-5129 题目大意为给一堆字符串,问由任意两个字符串的前缀子串(注意断句)能组成多少种不同的字符串. 思路是先用总方案数减去重复的方案数. 考虑对于一个字符串S,如图,假设S1,S2 ...

  9. HDU 6140 17多校8 Hybrid Crystals(思维题)

    题目传送: Hybrid Crystals Problem Description > Kyber crystals, also called the living crystal or sim ...

随机推荐

  1. NASA: SpaceX的猎鹰9号火箭将龙飞船发射到国际空间站

    At 5:42 a.m. EDT Friday, June 29, 2018, SpaceX’s Dragon spacecraft lifts off on a Falcon 9 rocket fr ...

  2. 【Eclipse】Elipse自定义library库并导入项目

    1.定义像JRE System Library之类的库 (1)点击UserLibrary (2)如果没有就点击new新建一个user library,否则进行4  (3)向user library添加 ...

  3. bootstrap table 双击可编辑,添加、删除行

    html: <table class="table table-bordered" id="para_table"> <tr> < ...

  4. 11.python3标准库--使用进程、线程和协程提供并发性

    ''' python提供了一些复杂的工具用于管理使用进程和线程的并发操作. 通过应用这些计数,使用这些模块并发地运行作业的各个部分,即便是一些相当简单的程序也可以更快的运行 subprocess提供了 ...

  5. charles抓包误点deny处理办法及日常抓包

    误点deny方法在最底下~~ (博文为转载) 我们在开发网站项目的时候,我们可以通过浏览器的debug模式来看request以及response的数据,那么如果我们开发移动端项目没有网页呢?如何抓取数 ...

  6. 接口测试(概念、Postman、SoapUI、jmeter)

    一.什么是接口测试 接口测试是测试系统组件间接口的一种测试.接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点.测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑 ...

  7. csu 1555(线段树经典插队模型-根据逆序数还原序列)

    1555: Inversion Sequence Time Limit: 2 Sec  Memory Limit: 256 MBSubmit: 469  Solved: 167[Submit][Sta ...

  8. pandas 数据结构的基本功能

    操作Series和DataFrame中的数据的常用方法: 导入python库: import numpy as np import pandas as pd 测试的数据结构: Series: > ...

  9. SAM-Toy Cars题解

    题目描述 Jasio 是一个三岁的小男孩,他最喜欢玩玩具了,他有n 个不同的玩具,它们都被放在了很高的架子上所以Jasio 拿不到它们. 为了让他的房间有足够的空间,在任何时刻地板上都不会有超过k 个 ...

  10. 使用 Python 的 sounddevice 包录制系统声音

    博客中的文章均为meelo原创,请务必以链接形式注明本文地址 sounddevice是一个与Numpy兼容的录音以及播放声音的包. 安装sounddevice包 直接通过pip就能安装. pip in ...