LA 3882 And Then There Was One
解题思路:分析要好久,懒得分析了,贴了某大牛的的分析,代码就是我自己写的。
N个数排成一圈,第一次删除m,以后每k个数删除一次,求最后一被删除的数。
如果这题用链表或者数组模拟整个过程的话,时间复杂度都将高达O(nk),而n<=10000,k<=10000 目测会直接TLE。
那么有没有其他的方法呢?答案是有的。
我们先忽略掉m, 分析一下每k个数删除一次,那就是经典的约瑟夫问题了。
那么,将每个数(1~n)按顺序编号为0~n-1
设第一个删除的数的编号为x,则x= k %n-1 (注意是编号,真正删除的数为编号+1)
那么剩下的n-1个数可以组成一个新的约瑟夫环。
现在的编号是什么呢?显然:(令x+1=y ,就是说y= k%n)
y , y+1 , y+2 ... n-1 , 0 , 1 ... y-2
把y放在第一个的目的是下一次从它开始数数。
重新开始数k个数.
你说重新?嗯。那么就可以这样重新编号:
y -> 0
y+1 ->1
y+2 ->2
...
...
y-2 -> n-2
现在就变成了n-1个数(编号从0~n-2)的约瑟夫问题了!
假设z是最后n-1个数留下的编号,那么z’是n个人留下的编号,则显然z’=(z+y)% n
如何知道n-1个的解?往下递归就好了嘛,知道n-2即可
所以,有:
ans [1]=0;
ans [n] =(ans[n-1]+k) %n;
(可能有人要问了:上面不是z’=(z+y)% n吗?现在怎么变成 k了?因为y= k%n,模运算)
然后,答案要+1 (编号->数)
那么这一题第一次是m怎么办呢?
也很简单,我们每次都移动K ,有n个数,那么答案就是ans[n]
但是第一次移动的是m,所以后面的移动都有个恒定的差距(k-m)
所以答案为:(ans[n] – (k – m) )% n (注意可能小于0 ,还有最终答案+1)
1 #include<cstdio> 2 int main() 3 { 4 int n, k, m, A[10005]; 5 while(~scanf("%d%d%d", &n, &k, &m) && (n || m || k)) 6 { 7 A[1] = 0; 8 for(int i = 2; i <= n; i++) A[i] = (A[i-1]+k)%i; 9 int a = (m - k + 1 + A[n]) % n; 10 if(a <= 0) a += n; //注意可能小于0 11 printf("%d\n", a); 12 } 13 return 0; 14 }
View Code
转载于:https://www.cnblogs.com/loveprincess/p/4834736.html
LA 3882 And Then There Was One相关推荐
- UVa LA 3882 - And Then There Was One 递推,动态规划 难度: 2
题目 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_pr ...
- UVa在线比赛单题汇总-----DP专题
动态规划基础 例题 LA 3882 UVa 3882 - And Then There Was One 递推------------无力orz UVa 10635 10635 - Prince and ...
- WCDMA中的URA和LA/RA
1.关于URA的概念: URA(UTRAN Registration Area)是UTRAN内部区域的划分适用于UE处于RRC连接状态的情形,而且只能在UTRAN端使用(比如由UTRAN发起的寻呼). ...
- LA 5717枚举+最小生成树回路性质
1 /*LA 5717 2 <训练指南>P343 3 最小生成树的回路性质 4 在生成的最小生成树上,新增一条边e(u,v) 5 若原图上u到v的路径的最大边大于e,则删除此边,加上e,否 ...
- 编译php时错误make ***[libphp5.la] Error 1
错误信息 make ***[libphp5.la] Error 1 /usr/bin/ld: cannot find -lltdl collect2: ld returned 1 exit statu ...
- 获取长度length_lab、labE、la、laE、ll、llE 钢筋锚固搭接长度6项参数的相互关系...
文|施工小诸葛 目录 01 相关概念 02 字母含义 03 lab 非抗震纵向受拉钢筋的基本锚固长度 04 la 非抗震纵向受拉钢筋的锚固长度 05 ll 非抗震纵向受拉钢筋搭接长 ...
- qu.la网站上的小说爬取
qu.la网站上的小说爬取 ##这个项目是我最早开始写的爬虫项目,代码比较简陋 在写这个项目时,我还不会Python的协程编程,用协程可提升爬虫速度至少5倍,参考我的文章[线程,协程对比和Python ...
- Linux中的动态库和静态库(.a/.la/.so/.o)
为什么80%的码农都做不了架构师?>>> Linux中的动态库和静态库(.a/.la/.so/.o) Linux中的动态库和静态库(.a/.la/.so/.o) C/C++程序 ...
- Android 解决 No static method in class La/a/a/a; or its super classes
错误堆栈: Process: com.chaozh.iReader, PID: 24217java.lang.NoSuchMethodError: No static method getDrawab ...
最新文章
- 对DIP IoC DI的理解与运用
- c++ 11 锁_国民技术面向智能锁市场提供全系芯片与开源安全解决方案
- [译] MDC-101 Flutter:Material Components(MDC)基础(Flutter)
- boost::container实现emplace进位的程序
- 盘点十个超级实用的 JS 特性
- c语言基础练习题 字符串输入scanf/gets 字符串赋值、比大小
- Python中__init__和__new__的区别详解
- 开源 免费 java CMS - FreeCMS-数据对象-answer
- 通过pip下载python包缓慢的解决方法
- 简书UI易用性缺陷:投稿按钮太小
- SNS类游戏cache server设计浅析
- linux环境安装jdk啊
- How to install VNC on Ubuntu
- 射频微电子学_专注于射频前端芯片,苏州汉天下完成新一轮融资
- 干货分享|Research Essay写作的规范及步骤详解
- 【Tools】Photoshop CS6安装详解教程
- 第一章 【数据分析师---数据可视化1】 matplotlib 静态图,无互动
- iOS 微信分享,返回自己的app 闪退
- 硬件设计之一——电源设计01:电源防护
- kettle-数据迁移场景
热门文章
- Python:简单的摄像头程序实现
- Agent监控软件在IT工作中的应用
- 2009年IT就业“危”中寻“机”
- Mac os 10.15配置Java14和Eclipse环境
- mysql入门到跑路_MySQL 24小时入门笔记(3),插入和删除,删库到跑路
- centos php7 无法加载mysqli_Linux下安装PHP7+MySQL
- SAP License:新总帐—Coding Block
- SAP License:销售流程
- 大鱼风控笔记 3:量化风控政策的关注点
- 一个自动上传ip到ftp服务器的bat脚本