题目

https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1883

题意

共有n个数(1..n)围成一个首尾相接的环,从m开始删除,每隔k个删除,最后留下来的是几?

思路

如刘书,首先是要找到递推关系。

1. 把起点视作编号0,f[n]为还剩下n个数(编号当然是紧挨的)的时候留下的最后一个编号,那么,明显f[n]与f[n - 1]有关系

2. 具体有什么关系呢?f[n]剩下的最后一个元素对应n个编号,删除第0个,重新以第k个编号为新起点的n-1个元素对应的f[n - 1],对应到公式上为(f[i - 1] + k - 1) % (i - 1) + 1

3. 现在不是从0开始,而是从m开始,也就是说最后还存在一个关系为:编号j的元素对应的值为(j + m - 1) % n + 1

感想

1. 和刘汝佳的算的不一致,不太理解刘书怎么算的,也许定义方式略有不同?

代码

#include <algorithm>
#include <cassert>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <string>
#include <tuple>
#define LOCAL_DEBUG
using namespace std;
const int MAXN = 1e4 + 4;
int f[MAXN];int main() {
#ifdef LOCAL_DEBUGfreopen("C:\\Users\\Iris\\source\\repos\\ACM\\ACM\\input.txt", "r", stdin);//freopen("C:\\Users\\Iris\\source\\repos\\ACM\\ACM\\output.txt", "w", stdout);
#endif // LOCAL_DEBUG//int T;
//    scanf("%d", &T);int n, k, m;for (int ti = 1;scanf("%d%d%d", &n, &k, &m) == 3 && n; ti++) {f[1] = 0;for (int i = 2; i <= n; i++) {f[i] = (f[i - 1] + k - 1) % (i - 1) + 1;}int ans = (m - 1 + f[n]) % n;printf("%d\n", ans + 1);}return 0;
}

View Code

转载于:https://www.cnblogs.com/xuesu/p/10419344.html

UVa LA 3882 - And Then There Was One 递推,动态规划 难度: 2相关推荐

  1. UVa 10934 Dropping water balloons:dp(递推)

    题目链接:https://vjudge.net/problem/27377/origin 题意: 有一栋n层高的楼,并给你k个水球.在一定高度及以上将水球扔下,水球会摔破:在这个高度以下扔,水球不会摔 ...

  2. 递推DP UVA 1366 Martian Mining

    题目传送门 1 /* 2 题意:抽象一点就是给两个矩阵,重叠的(就是两者选择其一),两种铺路:从右到左和从下到上,中途不能转弯, 3 到达边界后把沿途路上的权值相加求和使最大 4 DP:这是道递推题, ...

  3. UVa 12627:Erratic Expansion(递推)

    题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=844& ...

  4. UVa LA 4253 UVa 1421 Archery 枚举,状态削减,oj错误题目 难度: 1

    题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...

  5. LA 3882 And Then There Was One

    解题思路:分析要好久,懒得分析了,贴了某大牛的的分析,代码就是我自己写的. N个数排成一圈,第一次删除m,以后每k个数删除一次,求最后一被删除的数. 如果这题用链表或者数组模拟整个过程的话,时间复杂度 ...

  6. Uva 10074【递推dp】

    UVa 10074 题意:求01矩阵的最大子0矩阵. http://www.csie.ntnu.edu.tw/~u91029/MaximumSubarray.html#2 这里说的很清楚.先求Larg ...

  7. UVA 11021 - Tribles(概率递推)

    UVA 11021 - Tribles 题目链接 题意:k个毛球,每一个毛球死后会产生i个毛球的概率为pi.问m天后,全部毛球都死亡的概率 思路:f[i]为一个毛球第i天死亡的概率.那么 f(i)=p ...

  8. UVA - 11300 Spreading the Wealth 中位数,递推

    UVA - 11300 Spreading the Wealth 题意: 有n个人,每个人都有一些钱,每个人都可以把任意的钱分给左右相邻的两个人(第一个人可以把钱分给第二个人和第 n 个人),求最少需 ...

  9. UVa 11021 (概率 递推) Tribles

    Tribble是麻球? 因为事件都是互相独立的,所以只考虑一只麻球. 设f(i)表示一只麻球i天后它以及后代全部死亡的概率,根据全概率公式: f(i) = P0 + P1 * f(i-1) + P2 ...

最新文章

  1. python datetime.datetime 当前_python之time和datetime的常用方法
  2. POJ3133(插头dp)
  3. 乐理 music theory
  4. java邮件客户端源代码,JAVA基于B/S模式下的电子邮件客户端软件,源码分享
  5. WebDriver介绍
  6. android Formatter 的使用
  7. IntelliJ IDEA 2017.2 x64 安装Scala
  8. C语言知识分享:面向对象和面向过程到底是怎么回事?
  9. php redis 集群 长连接池,php如何实现redis连接池
  10. 国内首款 FPGA 云服务器,性能是通用 CPU 服务器 30 倍以上
  11. fantastical2语言设置_如何为iPhone定制Fantastical2以适应您的需求
  12. 不同手机型号图文预览_手机支持型号汇总
  13. 毫米和像素怎么换算_自己计算出来的关于像素和厘米单位的换算
  14. 从《沟通与说服必读12篇》到《影响力》,十大经典沟通类书籍推荐
  15. 男朋友向女朋友打的辞职报告
  16. LifecycleOwner xx is attempting to register while current state is RESUMED. LifecycleOwners must cal
  17. Javascript 实现一个分钟秒钟倒计时器
  18. mcnpf5输出结果_MCNP学习笔记-计数卡F6
  19. 【转载】自然界通用的“质子缓存”模型
  20. python条形图颜色设置_在matplotlib Python中设置不同的条形图颜色

热门文章

  1. php中json_encode中文编码问题分析
  2. oracle 基础1
  3. LeetCode 86. 分隔链表 中等难度
  4. 五本必读的深度学习圣经书籍,入门 AI 从 深度学习 开始
  5. 功率谱密度相关方法MATLAB实现
  6. #pragma pack(1)的作用
  7. mysql的dockerfile_Dockerfile构建MySQL
  8. 什么是Servlet?
  9. idea创建xml文件 却没有xml模板
  10. 058_JavaScript函数arguments对象