`
king_tt
  • 浏览: 2229535 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

UVa 133 - The Dole Queue 数据结构专题

 
阅读更多

FILE 133-The Dole Queue 8487
43.29%
3712
题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=103&page=show_problem&problem=69


题目类型: 数据结构, 链表


题意: N份申请书,排成一个圆圈, 按逆时针方向编号为1~N。 有两个公务员,公务员1站在1,往逆时针方向数到第k份,选中;公务员2站在N,往顺时针方向数到第m份,选中。 取走选中的编号的申请书,输出编号。如果编号一样,则只输出一个数。 直到所有申请书都拿光。


解体思路: 用循环链表模拟,取走的编号从链表中删除。这一题最难的地方在于两个人删除之后,他们的新位置的判断和选择,因为第一个人的新位置可能时第二个人要删除的位置,同理,第二个人的新位置也可能时第一个人要删除的位置。 最后, 循环结束的判断。 这些在代码里会有详细的注释


输入:

10 4 3
0 0 0

输出:

tex2html_wrap_inline344tex2html_wrap_inline348,tex2html_wrap_inline349tex2html_wrap_inline345,tex2html_wrap_inline343tex2html_wrap_inline341,tex2html_wrap_inline342tex2html_wrap_inline346,tex2html_wrap_inline5010,tex2html_wrap_inline347

wheretex2html_wrap_inline50represents a space.


#include<stdio.h>
#include<string.h>

int prev[25];
int next[25];
int N, pos1, pos2,m,n;

// 删除节点
void remove(int n){
    next[prev[n]] = next[n];
    prev[next[n]] = prev[n];
}

void init(){
    memset(prev,0,sizeof(prev));
    memset(next,0,sizeof(next));
    for(int i=1; i<=N;i++){
        prev[i]=i-1;
        next[i]=i+1;
    }
    prev[1]=N;
    next[N]=1;
    pos1=1;
    pos2=N;
}

void solve(){
    while(1){
        if(prev[pos2]==pos2 || next[pos1]==pos1 ){
            printf("%3d\n",pos1);
            break;
        }
        // 第一个人进行移动
        int stepNum=1;
        while(stepNum++<m)
            pos1 = next[pos1];
        // 第二个人进行移动
        stepNum=1;
        while(stepNum++<n)
            pos2 = prev[pos2];

        //如果两个人移动到相同的地方
        if(pos1==pos2){
            printf("%3d,",pos1);
            // 找出两个人的新位置
            int newPos1=next[pos1],newPos2=prev[pos2];
            // 如果第一个人的新位置是第二个人要删除的位置,那么要再跳过那个位置
            if(newPos1==pos2) newPos1=next[newPos1];
            // 如果第二个人的新位置是第一个人要删除的位置,那么也要再跳过那个位置
            if(newPos2==pos1) newPos2=prev[newPos2];
            
            // 把该节点删掉
            remove(pos1);
            
            pos1=newPos1;
            pos2=newPos2;
        }
        else {
            int newPos1=next[pos1],newPos2=prev[pos2];
        
            // 如果第一个人的新位置是第二个人要删除的位置,那么要再跳过那个位置
            if(newPos1==pos2 ) newPos1=next[newPos1];     
            // 如果第二个人的新位置是第一个人要删除的位置,那么也要再跳过那个位置
            if(newPos2==pos1) newPos2=prev[newPos2];
            
            // 特别情况:当最后只剩下两个结点,且两个人都选中不同的编号时,则两个都要删掉
            // 这时候,其中一个人的新位置一定还是它自己原来要删除的位置
            // 因为另一个要被另一个人删除
            if(newPos1==pos1)  { printf("%3d%3d\n",pos1,pos2);break; }
            if(newPos2==pos2) { printf("%3d%3d\n",pos1,pos2);break; }
               
            
            printf("%3d%3d,",pos1,pos2);

            remove(pos1);
            remove(pos2);
            
            pos1=newPos1;
            pos2=newPos2;
        }
    }     
}
int main()
{
    freopen("input.txt","r",stdin);
    while(scanf("%d %d %d",&N,&m,&n))
    {
        if(N==0 && m==0 && n==0) return 0;
        init();
        solve();      
    }
    return 0;
}      

 


—— 生命的意义,在于赋予它意义。

原创http://blog.csdn.net/shuangde800By D_Double





分享到:
评论

相关推荐

    UVA133-TheDoleQueue.zip_site:www.pudn.com_uva133

    《UVA133 - 救济金发放问题:The Dole Queue》 在计算机科学领域,算法是解决问题的关键工具,特别是在处理复杂数据结构和优化问题时。UVA(University of Virginia)在线判题系统提供了丰富的算法题目供程序员挑战...

    程序员2008年5月考试的重难点

    2. 数据结构:考试涉及数组、链表、树、图等各种数据结构,重点在于理解它们的特性和操作,以及如何在实际编程中应用。 3. 程序设计语言和算法:C语言是其中的重点,考察了数组、指针、循环等基础语法和概念,同时...

    当代研究生英语读写教程--下U7_Text A课件

    Text A 部分详细分析了“知识产权在美国的重要性如何反映研究型大学与社会之间关系的变化”,以及《拜杜法案》(Bayh-Dole Act)对此产生的影响。阅读理解部分(Reading—Text A)包括文本研究、主旨及结构解析。...

    2008年上半年程序员考试下午试题及答案下载

    【知识点详解】 1. **排序算法** - 从描述中提到的数组A和B都是排序好的,这涉及...以上知识点涵盖了数据结构、算法、字符串处理、条件控制、循环、内存管理和算法实现等多个方面,这些都是程序员必须掌握的基本技能。

    大学知识产权所有权归属模式演进及其对技术转移的影响

    自20世纪80年代美国实施“Bayh-Dole”法案以来,这一议题成为了全球科技政策关注的核心。该法案旨在调整大学科研成果的知识产权归属,以促进技术转移和商业化。在中国,由于长期受到计划经济体制的影响,大学科研...

    08年上半年程序员题目下午卷子

    ### IT知识点解析:08年上半年程序员题目下午卷子 #### 题目一解析:排序合并算法 ...这三个题目涵盖了排序算法、字符串操作和特殊矩阵生成等IT领域的核心知识点,对于理解数据结构、算法设计和编程实践具有重要意义。

    专利制度基本原理1.ppt

    - 技术转移:1980年的拜杜法案(Bayh-Dole Act)允许大学拥有并管理政府资助研究产生的知识产权,推动了大学与产业界的合作,加强了技术转移。 - 案件背景:Madey教授在杜克大学使用其专利设备进行研究,但在与大学...

    C++经典算法

    C++通过二维数组来表示矩阵,使用嵌套循环实现矩阵相乘,这是理解数据结构和算法基础的重要练习。 2. **Dole Rob算法.cpp**:Dolev-Strong算法是一种用于分布式系统中的消息传递协议,确保消息的顺序性和可靠性。在...

    [7]Basic training (no endnote ref).pdf

    8. **数据兼容性**:支持与SCADA/GIS的数据交换,提供DOLE语言;可通过Excel输入输出数据;并能与PSSE/E、PSS/U等其他电力系统仿真软件进行数据转换。 【PowerFactory软件的主要功能】 PowerFactory的主要功能包括...

    大学专利和许可活动:文献回顾-研究论文

    这篇关于大学专利和许可活动的文献综述基于 1980 年至 2004 年间发表的 125 篇论文,这些论文是通过查询 ABI/INFORM 和 EconLit 获得的,使用关键词“大学”、“专利”、“许可”、“ Bayh-Dole”、“triple helix...

    与大学专利相关的实证分析-研究论文

    根据美国国家科学基金会 (NSF) 的数据,美国专利局 (USPTO) 向美国学术机构颁发的专利从 1996 年的 2,293 件增加到 2014 年的 5,990 件,这是 NSF 编制数据的最近一年(美国国家科学委员会) 2016)。 在所有授予的...

    2008年程序员考试真题 程序员考试真题 真题

    这种操作通常在数据结构和算法中出现,是基本的排序算法之一。处理方式通常是采用双指针,分别指向两个数组的起始位置,比较两个指针所指元素大小,将较小的元素放入结果数组,然后移动指向较小元素的指针,直到其中...

    accrete-rb:星型发电机

    请参阅以获取Stephen H.Dole的原始论文 本地开发设置 先决条件 Ruby 通过\curl -L https://get.rvm.io | bash安装rvm \curl -L https://get.rvm.io | bash \curl -L https://get.rvm.io | bash 通过rvm install _...

    【北师大版】(安徽专用)2012届高三英语一轮复习精品学案:M7 Unit 19 Language.doc

    如"Dole always likes to surround himself with young people." 这表示多尔喜欢和年轻人在一起。"surrounding"形容词常用来描述周围的环境,而"surroundings"名词形式则特指周围环境或事物。 4. "adequate"形容词...

    VMworld 2009 - VMware COO主题演讲

    VMware作为一家领先的企业级虚拟化解决方案提供商,其COO的演讲对 Fortune 1000强企业(如Allied Waste Industries、Amerco、Dole Food等)的IT决策者们具有重大意义,这些企业尚未采用VMware的技术,暗示了市场中仍...

    leetcode伪代码-Aps:应用程序

    dole na tastaturata) -&gt; sluzi za generate code, konstruktor, getters setters... 查找班级 – Ctrl + N -&gt; 要查找您要查找的班级,只需按 Ctrl + N 并输入名称即可。 智能代码完成 –&gt; Ctrl + Shift + Space - ...

    Excel.ToDOLE病毒的专杀Delphi源码

    Excel.ToDOLE病毒是一种针对Microsoft Excel的恶意软件,它利用了DOLE对象库中的漏洞进行传播和感染。这种病毒通常会伪装成正常的Excel文件,当用户打开受感染的文件时,病毒会自动执行并可能对用户的系统造成破坏。...

    DIgSILENT软件简介借鉴.pdf

    DIgSILENT/PowerFactory是一款由德国DIgSILENT GmbH公司开发的综合性电力系统仿真软件,其名称源于“Digital Simulation for the Investigation of Large Electric Networks”。该软件涵盖了电力系统分析的众多方面...

    专利制度基本原理概述.pptx

    1980年的拜杜法案(Bayh-Dole Act)是美国大学技术转移的一个转折点,它允许大学拥有并商业化由政府资助研究产生的知识产权。这一变革促使大学不仅局限于教学和科研,还积极参与社会经济发展,成为技术转移的重要...

Global site tag (gtag.js) - Google Analytics