题目链接

http://acm.hdu.edu.cn/showproblem.php?pid=6136

题解

完了,普及题都不会做了。。。

发现一个重要性质是只有相邻的人才会相撞,于是直接拿堆维护即可。。。

WA了好几发。。。

代码

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<queue>
#include<algorithm>
#define llong long long
using namespace std; const int N = 1e5;
struct Fraction
{
llong x,y;
Fraction() {}
Fraction(llong _x,llong _y) {x = _x,y = _y;}
void output() {printf("%lld/%lld ",x,y);}
bool operator <(const Fraction &arg) const
{
return x*arg.y<y*arg.x;
}
};
struct Element
{
llong a,b; int id;
bool operator <(const Element &arg) const
{
return b<arg.b;
}
} a[N+3];
struct Node
{
int id1,id2; Fraction x;
Node() {}
Node(int _id1,int _id2,Fraction _x) {id1 = _id1,id2 = _id2,x = _x;}
bool operator <(const Node &arg) const
{
return arg.x<x;
}
};
priority_queue<Node> que;
bool vis[N+3];
int nxt[N+3],prv[N+3];
int n; llong m; llong gcd(llong x,llong y) {return y==0 ? x : gcd(y,x%y);} Fraction calc(Element x,Element y)
{
if(x.a<y.a) {swap(x,y);}
if(x.b>y.b) {y.b += m;}
return Fraction(y.b-x.b,x.a-y.a);
} int main()
{
int T; scanf("%d",&T);
while(T--)
{
scanf("%d%lld",&n,&m);
for(int i=1; i<=n; i++) scanf("%lld",&a[i].b);
for(int i=1; i<=n; i++) scanf("%lld",&a[i].a),a[i].id = i;
sort(a+1,a+n+1);
for(int i=1; i<=n; i++) prv[i] = i==1?n:i-1,nxt[i] = i==n?1:i+1;
for(int i=1; i<=n; i++) que.push(Node(i,nxt[i],calc(a[i],a[nxt[i]])));
Fraction ans;
while(!que.empty())
{
Node cur = que.top(); que.pop();
int u = cur.id1,v = cur.id2;
if(vis[u]||vis[v]) continue;
ans = cur.x;
if(a[u].id>a[nxt[u]].id) swap(u,v);
vis[u] = true;
if(prv[u]!=nxt[u])
{
que.push(Node(prv[u],nxt[u],calc(a[prv[u]],a[nxt[u]])));
}
nxt[prv[u]] = nxt[u];
prv[nxt[u]] = prv[u];
}
llong g = gcd(ans.x,ans.y);
printf("%lld/%lld\n",ans.x/g,ans.y/g);
for(int i=1; i<=n; i++) vis[i] = nxt[i] = prv[i] = 0;
}
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. HDU 2176 取(m堆)石子游戏 (尼姆博奕)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2176 m堆石子,两人轮流取.只能在1堆中取.取完者胜.先取者负输出No.先取者胜输出Yes,然后输出怎 ...

  5. hdu 2177 取(2堆)石子游戏(威佐夫博奕)

    题目链接:hdu 2177 这题不是普通的 Nim 博弈,我想它应该是另一种博弈吧,于是便推 sg 函数打了个 20*20 的表来看,为了方便看一些,我用颜色作了标记,打表代码如下: #include ...

  6. HDU 1058 优先队列or堆

    本来应当是一道优先队列或者堆的题 因为每个数都应该是已经得到的数*2 *3 *5 *7而得到的 但是 2*7 大于 3*2 这就必须保证每次取得都是没有拿过的最小的数 但是它主动降低难度在样例里卖了个 ...

  7. HDU 2176 取(m堆)石子游戏(Nim)

    取(m堆)石子游戏 题意: Problem Description m堆石子,两人轮流取.只能在1堆中取.取完者胜.先取者负输出No.先取者胜输出Yes,然后输出怎样取子.例如5堆 5,7,8,9,1 ...

  8. HDU 2176 取(m堆)石子游戏 尼姆博弈

    题目思路: 对于尼姆博弈我们知道:op=a[1]^a[2]--a[n],若op==0先手必败 一个简单的数学公式:若op=a^b 那么:op^b=a: 对于第i堆a[i],op^a[i]的值代表其余各 ...

  9. HDU 2176:取(m堆)石子游戏(Nim博弈)

    取(m堆)石子游戏 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

随机推荐

  1. Django之ORM操作.md

    1.ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人 ...

  2. Hive 教程(一)-安装与配置解析

    安装就安装 ,不扯其他的 hive 依赖 在 hive 安装前必须具备如下条件 1. 一个可连接的关系型数据库,如 Mysql,postgresql 等,用于存储元数据 2. hadoop,并启动 h ...

  3. golang(1):简介

    golang语言特性: 1. 垃圾回收 a. 内存自动回收,不需要开发人员管理内存,开发人员专注业务实现 b. 只需要new分配内存,不需要释放 2. 天然并发 a. 从语言层面支持并发,非常简单 b ...

  4. JSTL标签+El表达式把list集合数据展示到 JSP页面

    JSP页面 <%@ page import="cn.itcast.domain.User" %><%@ page import="java.util.L ...

  5. MySQL数据库基础-JAVA

    数据库 MySQL初步 MySQL基础认知 (Oracle真的是走哪祸害到哪23333) Java多用MySQL和Oracle SQLServer也收费,但是还行,比Oracle便宜,一个差不多3w多 ...

  6. 这38个小技巧告诉你如何快速学习MySQL数据库

    1.如何快速掌握MySQL? ⑴培养兴趣兴趣是最好的老师,不论学习什么知识,兴趣都可以极大地提高学习效率.当然学习MySQL 5.6也不例外.⑵夯实基础计算机领域的技术非常强调基础,刚开始学习可能还认 ...

  7. 图片哈希概论及python中如何实现对比两张相似的图片

    Google 以图搜图的原理,其中的获取图片 hash 值的方法就是 AHash. 每张图片都可以通过某种算法得到一个 hash 值,称为图片指纹,两张指纹相近的图片可以认为是相似图片. 以图搜图的原 ...

  8. React前端有钱途吗?《React+Redux前端开发实战》学起来

    再不学React就真的跟不上大前端的形式了,目前几乎所有前端的招聘条件都是精通React者优先,看看拉勾网的React薪资,都是15K-20K,这个暑假,必须动起来了. 如果你熟悉JavaScript ...

  9. 判断页面是在移动端还是PC端打开的

    $(function () { var curWwwPath = window.document.location.href; var pathName = window.document.locat ...

  10. 2019-2020-1 20199319《Linux内核原理与分析》第六周作业

    系统调用的三层机制(下) 给MenuOS增加命令 首先进入LinuxKernel文件夹,删除menu目录,然后git clone克隆一个新版本的menu,新版本的menu中已经添加了time和time ...