HDU 6136 Death Podracing (堆)
题目链接
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 (堆)的更多相关文章
- HDU 6136 Death Podracing(循环链表)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=6136 [题目大意] 一堆人在操场上跑步,他们都有一定的速度和初始位置, 当两个人相遇的时候编号较小 ...
- HDU 5860 Death Sequence(死亡序列)
p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: Calibri; font-s ...
- HDU 5860 Death Sequence(递推)
HDU 5860 Death Sequence(递推) 题目链接http://acm.split.hdu.edu.cn/showproblem.php?pid=5860 Description You ...
- HDU 2176 取(m堆)石子游戏 (尼姆博奕)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2176 m堆石子,两人轮流取.只能在1堆中取.取完者胜.先取者负输出No.先取者胜输出Yes,然后输出怎 ...
- hdu 2177 取(2堆)石子游戏(威佐夫博奕)
题目链接:hdu 2177 这题不是普通的 Nim 博弈,我想它应该是另一种博弈吧,于是便推 sg 函数打了个 20*20 的表来看,为了方便看一些,我用颜色作了标记,打表代码如下: #include ...
- HDU 1058 优先队列or堆
本来应当是一道优先队列或者堆的题 因为每个数都应该是已经得到的数*2 *3 *5 *7而得到的 但是 2*7 大于 3*2 这就必须保证每次取得都是没有拿过的最小的数 但是它主动降低难度在样例里卖了个 ...
- HDU 2176 取(m堆)石子游戏(Nim)
取(m堆)石子游戏 题意: Problem Description m堆石子,两人轮流取.只能在1堆中取.取完者胜.先取者负输出No.先取者胜输出Yes,然后输出怎样取子.例如5堆 5,7,8,9,1 ...
- HDU 2176 取(m堆)石子游戏 尼姆博弈
题目思路: 对于尼姆博弈我们知道:op=a[1]^a[2]--a[n],若op==0先手必败 一个简单的数学公式:若op=a^b 那么:op^b=a: 对于第i堆a[i],op^a[i]的值代表其余各 ...
- HDU 2176:取(m堆)石子游戏(Nim博弈)
取(m堆)石子游戏 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
随机推荐
- 新建项目报错'/Users/yanguobin/IdeaProjects/Demo/pom.xml' already exists in VFS
出现该情况的原因:是删除的时候并没有删除干净,点击如下位置会清除Idea的本地代码历史,然后重新创建项目就可以了
- 【pytorch】学习笔记(四)-搭建神经网络进行关系拟合
[pytorch学习笔记]-搭建神经网络进行关系拟合 学习自莫烦python 目标 1.创建一些围绕y=x^2+噪声这个函数的散点 2.用神经网络模型来建立一个可以代表他们关系的线条 建立数据集 im ...
- etcd集群安装
etcd 是一个分布式一致性k-v存储系统,可用于服务注册发现与共享配置,具有以下优点:1.简单:相比于晦涩难懂的paxos算法,etcd基于相对简单且易实现的raft算法实现一致性,并通过gRPC提 ...
- CE修改器使用教程 [入门篇]
Cheat Engine 一般简称CE,是一个开放源代码的作弊软件,其功能包括:内存扫描.十六进制编辑器.调试工具,Cheat Engine 自身附带了外挂制作工具,可以用它直接生成外挂工具,CE可以 ...
- 链接校验——是否是协议http://或https://开头的
if(str.substr(0,7)!="http://" && str.substr(0,7)!="https://"){ return 'y ...
- 如何在万亿级别规模的数据量上使用Spark
一.前言 Spark作为大数据计算引擎,凭借其快速.稳定.简易等特点,快速的占领了大数据计算的领域.本文主要为作者在搭建使用计算平台的过程中,对于Spark的理解,希望能给读者一些学习的思路.文章内容 ...
- pc和手机适应js代码
如果是手机的话跳转到新的地址 <script type="text/javascript"> function IsPC() { var userAgentInfo = ...
- Vue中自定义指令的使用方法!
除了核心功能默认内置的指令 (v-model 和 v-show),Vue 也允许注册自定义指令.注意,在 Vue2.0 中,代码复用和抽象的主要形式是组件.然而,有的情况下,你仍然需要对普通 DOM ...
- 第十篇.3、ython并发编程之多线程理论部分
一 什么是线程 在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程 线程顾名思义,就是一条流水线工作的过程,一条流水线必须属于一个车间,一个车间的工作过程是一个进程 车间负责把资源整合 ...
- Boston Key Party 2015 Heath Street 题解(Writeup)
Heath Street是Boston Key Party 2015的一道数字取证题目,我们得到了一个叫做“secretArchive.6303dd5dbddb15ca9c4307d0291f77f4 ...