Death Podracing HDU - 6136 (循环链表)

本文介绍了一个基于操场跑步竞赛的游戏模拟算法。在这个游戏中,参与者在操场上跑步,当两人相遇时,编号较小者出局,直到最后一名选手胜出。文章提供了一段C++代码实现,并详细解释了如何通过计算相遇时间来确定游戏的最终结果。

参考http://www.cnblogs.com/forever97/p/hdu6136.html
题目大意】

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

代码没有敲对,留个坑


#include<bits/stdc++.h>
using namespace std;
#define sf scanf
#define pf printf
#define mem(a,b) memset(a,b,sizeof(a));
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define MP make_pair
#define ULL unsigned long long
#define LL   long long
#define inf 0x3f3f3f3f
#define md ((ll+rr)>>1)
#define ls (i<<1)
#define rs (ls|1)
#define eps 1e-5
#define N 100010
#define ree freopen("in.txt","r",stdin);
#define bug pf("----------------");
//2017年09月01日20:18:58
struct People{int pw,v,d;}p[N];
bool cmp(People a,People b){ return a.d<b.d; }
struct Frac{
    int num,den;
    Frac(){}
    Frac(int _num,int _den){ den=_den;num=_num; }
    bool friend operator <(Frac a,Frac b){ return 1LL*a.num*b.den<a.den*b.num; }
};
struct Node{
    int a,b; Frac t;
    Node(){}
    Node(int _a,int _b,Frac _t){
        a=_a;b=_b;t=_t;
    }
    bool friend  operator<(Node a,Node b){ return a.t<b.t; }
};
int n,L;
int nxt[N],pre[N],del[N];
priority_queue<Node>q;
Frac Cal(People a,People 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);
}
void out(int id){
    del[id]=1;
    nxt[pre[id]]=nxt[id];
    pre[nxt[id]]=pre[id];
    q.push(Node(pre[id],nxt[id],Cal(p[pre[id]],p[nxt[id]])));
}
int main(){
    ree
    int T;
    sf("%d",&T);
    while(T--){
        sf("%d%d",&n,&L);
        mem(del,0);
        for(int i=0;i<n;++i)sf("%d",&p[i].d),p[i].pw=i;
        for(int i=0;i<n;++i)sf("%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(Node(i,nxt[i],Cal(p[i],p[nxt[i]])));
        }
        int cnt=n;Frac ans;
        while(!q.empty()){
            Node u=q.top();q.pop();
            if(del[u.a]||del[u.b])continue;
            if(--cnt==1){ans=u.t;break;}
            if(p[u.a].pw>p[u.b].pw)out(u.b);
            else out(u.a);
        }
        pf("%d/%d\n",ans.num,ans.den);
    }
}
数据驱动的两阶段分布鲁棒(1-范数和∞-范数约束)的电热综合能源系统研究(Matlab代码实现)内容概要:本文围绕“数据驱动的两阶段分布鲁棒(1-范数和∞-范数约束)的电热综合能源系统研究”展开,提出了一种结合数据驱动与分布鲁棒优化方法的建模框架,用于解决电热综合能源系统在不确定性环境下的优化调度问题。研究采用两阶段优化结构,第一阶段进行预决策,第二阶段根据实际场景进行调整,通过引入1-范数和∞-范数约束来构建不确定集,有效刻画风电、负荷等不确定性变量的波动特性,提升模型的鲁棒性和实用性。文中提供了完整的Matlab代码实现,便于读者复现和验证算法性能,并结合具体案例分析了不同约束条件下系统运行的经济性与可靠性。; 适合人群:具备一定电力系统、优化理论和Matlab编程基础的研究生、科研人员及工程技术人员,尤其适合从事综合能源系统、鲁棒优化、不确定性建模等相关领域研究的专业人士。; 使用场景及目标:①掌握数据驱动的分布鲁棒优化方法在综合能源系统中的应用;②理解1-范数和∞-范数在构建不确定集中的作用与差异;③学习两阶段鲁棒优化模型的建模思路与Matlab实现技巧,用于科研复现、论文写作或工程项目建模。; 阅读建议:建议读者结合提供的Matlab代码逐段理解算法实现细节,重点关注不确定集构建、两阶段模型结构设计及求解器调用方式,同时可尝试更换数据或调整约束参数以加深对模型鲁棒性的理解。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值