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 ...
随机推荐
- Ansible 系统概述与部署
Ansible 系统概述 Ansible是一款为类Unix系统开发的自由开源的配置和自动化工具.它用Python写成,类似于saltstack和Puppet但是有一个不同和优点是我们不需要在节点中安装 ...
- Collection<E>接口
https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html public interface Collection<E ...
- 首个springboot项目总结
项目说明:采用分布式架构的基于restfulApi的后端微服务api项目. 用到的技术栈:springboot.mybatis.swagger.eureka注册中心.gateway.awss3.doc ...
- Spring的AOP,Struts2的拦截器(Interceptor),以及springMVC的(interceptor)
参考外链:http://www.ibm.com/developerworks/cn/java/j-lo-springaopfilter/ 1.首先,spring的AOP作用范围很广,可以使用Aspec ...
- openlayers之天地图为底图 叠加其他底图 加载遇到的各种报错
今天以前使用天地图为底图时,map里source的定义:http://t3.tianditu.com~~~ 今天突然报跨域的错误,原有地址访问受限,可是key值是有的 最后发现就是前半段的原因 将前半 ...
- java 周期时期计算
package org.apple.date; import java.text.SimpleDateFormat; import java.util.Calendar; import java.ut ...
- 查询SAP数据库表的大小
事物代码DB02 Perfomrmance->Additional Functions->SQL Command Editor->写数据表->执行 select bytes/1 ...
- Exited too quickly (process log may have details)-配置问题
在配置supervisor的时候,提示Exited too quickly (process log may have details),这个时候一脸懵逼,啥回事,执行太快了???
- Spring Boot整合actuator实现监控管理
Spring Boot使用actuator监控管理 1.在pom文件中导入相关的依赖 <dependency> <groupId>org.springframework.boo ...
- jquery 知识整理
大纲一.jQuery简介 二.jQuery 和Dom关系及jQuery版本 1.jQuery版本 2.jQuery和Dom转换 三.jQuery 选择器 1.1.基本 1.2.层级 2.基本筛选器 3 ...