提目(提交)链接→UVa-133

百度翻译→百度翻译

没使用过该网站的同学请猛戳这里→vJudge教程


分析:

最开始的固有思维是循环就用循环链表,其实完全可以把它看成一个大一点的周期类型题(一个大周期),用数组+求余即可解决。唯一需要注意的是:循环需要同时满足顺、逆时针两种需要(见第十行代码)。

代码:
#include<iostream>
#include<cstdio>
#define maxn 25
int n, k, m, a[maxn];//逆时针走t步,步长是d(-1表示顺时针走),返回新位置
int go(int p, int d, int t) {while(t--) {//核心代码:如果按正常的取余:(p+d)%n,想从1顺时针变成10是不可能的。这里的+n-1目的是防止变成0, do { p = (p+d+n-1) % n + 1; } while(a[p] == 0);   //走到下一个非0数字 }return p;
} using namespace std;
int main() {while(cin>>n>>k>>m && n) {for(int i = 1; i <= n; i++)  a[i] = i;      //从1到n。 int left = n;                              //还剩下的人数int p1 = n, p2 = 1;                           //P1是尾巴、P2是头 while(left) {p1 = go(p1, 1, k);p2 = go(p2, -1, m); printf("%3d", p1); left--;if(p2 != p1) { printf("%3d", p2); left--; } a[p1] = a[p2] = 0 ;                      //相当于删除if(left) printf(","); } printf("\n"); }return 0;
}
收获:

1、这道题唯一的难点就是那段取余的核心代码,也就是同时满足1->n与n->1的情况,不得不说,紫皮书牛批!
2、我们要摸透出题人的心思,试想:如果我们是出题人,出了一道大水题,会让它又臭又长或是用复杂的函数吗? 不会。所以做这种题千万千万不要想得太复杂。 想清楚这个问题,你会发现很多题变得如此简单。


最后分享一条大牛的建议(对笔者受益匪浅):算法最好有人带着学,如果条件不允许,一定要到网络上广泛交流、学习。

算法竞赛入门经典(第二版) | 例题4-3 救济金发放 (UVa133,The Dole Queue)相关推荐

  1. 算法竞赛入门经典(第二版) | 例题4-5 追踪电子表格中的单元格 (UVa512,Spreadsheet Tracking,World Finals)(解法二)

    本着清晰明了易懂可以水两篇 的理念,笔者将这道题分两次发布.这是第二种解法. 第一种解法传送门→解法一+提交网址 因为解法1中有详细关于题目和输入输出格式等的介绍,这里就不过多赘述了. 分析: 一些初 ...

  2. 算法竞赛入门经典(第二版) | 例题4-2 刽子手游戏 (UVa489,Hangman Judge)

    大家站在出题者的角度考虑,我们出了一道大水题,会让它又臭又长或是用复杂的函数吗? 不会.所以做这种题千万不要想得太复杂.循环+数组足矣. 提目(提交)链接→UVa-489 百度翻译→百度翻译 没使用过 ...

  3. 算法竞赛入门经典(第二版) | 例题5-4 反片语 (map+标准化)(UVa156,Ananagrams)

    题目大意: 输入一些单词,找出所有满足如下条件的单词:该单词不能通过字母重排,得到输入文本中的另外一个单词.在判断是否满足条件时,字母不分大小写,但在输出时应保留输入中的大小写,按字典序排列. 题目( ...

  4. 算法竞赛入门经典(第二版) | 例题5-3 安迪的第一个字典 (紫书牛啤!)(UVa10815,Andy's First Dictionary)

    概述: 输入一个文本,找出所有不同的单词,按字典序排序,去重后,输出,单词不分大小写. 储备知识: 1.sstring头文件的用法→sstring头文件函数详解 2.cctype头文件的用法→ccty ...

  5. 算法竞赛入门经典(第二版) | 例题5-2 木块问题 (紫皮书牛啤!)(UVa101,The Blocks Problem)

    大意: 输入n,代表n个木块,输入最多n种操作类型,按类型对木块进行操作,读入quit结束 输入输出格式: 1.move a onto b:将a和b所在上方的方块先归位,再将a移到b所在柱子 2.mo ...

  6. 算法竞赛入门经典(第二版) | 例题5-1 大理石在哪 (普适查找)(UVa10474,Where is the Marble?)

    大意: 给一序列,要求先将序列排序.再给n个数字,找到每个数字在序列中的位置 储备知识→algorithm头文件函数详解 题目(提交)网址→UVa-10474 百度翻译→百度翻译 没使用过该网站的同学 ...

  7. 算法竞赛入门经典(第二版) | 例题4-5 追踪电子表格中的单元格 (UVa512,Spreadsheet Tracking,World Finals)(解法一)

    大意 输入:r(行)c(列)n(种操作)m(个行/列),给出具体行/列 x(个坐标),给出具体坐标. 输出:m个坐标经过n种操作后分别移动到了哪里. 注意:所有操作都是根据原始表进行的,如:1,2,3 ...

  8. 算法竞赛入门经典(第二版) | 例题4-4 信息解码 (紫皮书牛啤!)(UVa213,Message Decoding)

    大意: 二进制编码中取前三位,得到编码长度为n(0<=n<=7), 按此长度重复截取编码中剩余部分(n位一截),直到读取n个1结束.再次取三位,长度为n,重复上述操作-直至n个1后接000 ...

  9. UVA-12171 雕塑 题解答案代码 算法竞赛入门经典第二版

    GitHub - jzplp/aoapc-UVA-Answer: 算法竞赛入门经典 例题和习题答案 刘汝佳 第二版 这道题目在<算法竞赛入门经典第二版>书中标注了星号,也是第一道出现星号的 ...

最新文章

  1. 零基础python必背代码-零基础小白Python入门必看:通俗易懂,搞定深浅拷贝
  2. tensorflow 对csv数据进行批量获取
  3. 数据结构和算法解:第九章 算法设计技巧
  4. 牛顿-拉夫逊法进行潮流计算matlab源程序
  5. 使用verilog实现基于FPGA的TDC设计
  6. 在CockroachDB上运行Flowable
  7. android Sqlite小记
  8. 前端学习(848):为什么学习节点操作和节点简介
  9. HTML二刺螈网址导航模板
  10. 校验电话号码 手机号码正则表达式————转载
  11. c语言算法五大特性,计算机算法必须具备哪5个特性?
  12. 企业微信怎么批量加人?怎么管理员工?看看这套系统
  13. 科学课和计算机整合,信息技术与小学科学课堂整合的现状分析论文
  14. iOS 9以上系统 信任的企业级开发者证书
  15. Micro LED将引领小间距显示的未来。
  16. Python编程之md5加密和sha1加密
  17. Microsoft project 2016 使用出现的bug
  18. 如何添加51la代码及隐藏统计图标
  19. 计算机毕业设计Java智能停车场管理系统(源码+系统+mysql数据库+lw文档)
  20. Delphi-idHttp-JSON用法

热门文章

  1. IDEA 15款神级良心插件强烈推荐收藏
  2. 缓存系统中的三座大山
  3. OS- -文件系统(三)
  4. 07 / LiveVideoStack主编观察:走,卷海外去
  5. P2P技术如何拯救一家直播网站
  6. 王立众:学习多媒体开发从编解码开始
  7. U3D激发拍照新活力,Camera360优化之旅
  8. 利用Simple-RTMP-Server搭建RTMP和HLS直播服务(上)
  9. 研效优化实践:Python单测——从入门到起飞
  10. 百万局对战教AI做人,技术解读FPS游戏中AI如何拟人化