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 ...
随机推荐
- CF450A 【Jzzhu and Children】
普通的模拟题这题用一个队列容器来模拟队列元素是pair类型的,first用来存每个小朋友想要的糖数,second用来存小朋友的序号,然后开始模拟,模拟出口是当队列迟到等于1时就输出当前队列里小朋友的序 ...
- JAVA重载和数组
Java 重载:相同的方法名,但参数个数或者类型不一样的情况下,自动执行不同的方法 数组: int[] array=new int[5]; System.out.println(array); ...
- Java后端技术面试汇总(第二套)
1.Java相关 • Arraylist与LinkedList默认空间是多少:• Arraylist与LinkedList区别与各自的优势List 和 Map 区别:• 谈谈HashMap,哈希表解决 ...
- WPF ListView多行显示
//前台 <ListView Margin="14,152,12,74" Name="lvList" SelectionMode="Multip ...
- 优秀java博客
https://www.jianshu.com/p/efb58b7115bf?utm_source=tuicool https://www.nowcoder.com/discuss/110317 ht ...
- 第八篇 CSS定位
CSS定位 CSS除了内外边距控制元素,还有定位,看到“定位”两个字,同学们应该就能清楚,它能够做什么. 在刚学习的时候,我也经常使用定位,来控制元素的位置,但是初学的同学可能会注意不到定位的一些 ...
- 第一篇 HTML 认识HTML
认识HTML 学习一门语言,我们要先了解它,可以不用太资深,但要做到别人问,你能回答得出来! 注:推荐大家去网址:www.w3school.com.cn 前端学习手册(免费的) HTML(超文本标记语 ...
- 如何编写一个路由器的界面1-Luci开发入门
Howto:如何写Module(模块)-----------------这一部分主要是翻译github上的document 注意:如果您打算将模块加入LUCI整合之前,您应该阅读Module参考. 本 ...
- Linux下部署Kafka分布式集群,安装与测试
注意:部署Kafka之前先部署环境JAVA.Zookeeper 准备三台CentOS_6.5_x64服务器,分别是:IP: 192.168.0.249 dbTest249 Kafka IP: 192. ...
- centos7安装kong和kong-dashboard
1.安装Kong yum install -y https://kong.bintray.com/kong-community-edition-rpm/centos/7/kong-community- ...