本文出自:http://blog.csdn.net/dr5459

题目地址:

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4198

题目意思:

给你编号1~n的数,每次从格k个删一个数,会有一个顺序

让你给出最后三个被删除的数

解题思路:

这题很明显就是约瑟夫的变形

假设编号从0~n-1

我们令f[1]=0   表示还剩1个时最后被删掉的一定是0

那么经典的约瑟夫公式变为f[n]=(f[n-1]+k)%n

表示剩n个时最后一个被删掉的

我们可以想到,如果我们知道剩2个的时候,被删除的是谁,剩3个的时候被删掉的是多少

然后再根据上面的公式就可以搞定了

通过本题,让我更进一步的理解了约瑟夫公式

下面是两种不同代码:

直接推出倒数被删掉的(未证明)

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std; int main()
{
int n,k;
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&k);
int x;
x=(k+2)%3;
for(int i=4;i<=n;i++)
x=(x+k)%i;
printf("%d ",x+1);
x=(k+1)%2;
for(int i=3;i<=n;i++)
x=(x+k)%i;
printf("%d ",x+1);
x=0;
for(int i=2;i<=n;i++)
x=(x+k)%i;
printf("%d\n",x+1);
}
return 0;
}

下面给出自己推的

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std; int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n,k;
scanf("%d%d",&n,&k);
int ans1=0;
int ans2,ans3;
for(int i=2;i<=n;i++)
{
ans1 = (ans1+k)%i;
if(i==2)//当剩下2个的,倒数第二个被删除的就是和倒数第一个不同的,答案只有0,1
{
ans2 = !ans1;
}
else if(i==3)//当剩下3个的时候,就是在0,1,2里面找不是ans1,ans2的
{
ans2 = (ans2+k)%i;
int v[3];
memset(v,false,sizeof(v));
v[ans1] = 1;
v[ans2] = 1;
for(int j=0;j<3;j++)
if(!v[j])
{
ans3 = j;
break;
}
}
else
{
ans2 = (ans2+k)%i;
ans3 = (ans3+k)%i;
}
}
ans1 = ans1+1;
ans2 = ans2+1;
ans3 = ans3+1;
printf("%d %d %d\n",ans3,ans2,ans1); }
return 0;
}

UVA1452|LA4727-----Jump------经典的约瑟夫公式的变形(DP)的更多相关文章

  1. UVa 1394 约瑟夫问题的变形

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

  2. LA 3882 And Then There Was One[约瑟夫问题的变形]

    And Then There Was One UVALive - 3882 Sample Input   Sample Output //设f[i]为(原约瑟夫问题)第i次要删除的标号 #includ ...

  3. poj2279 Mr. Young's Picture Permutations[勾长公式 or 线性DP]

    若干人左对齐站成最多5行,给定每行站多少个,列数从第一排开始往后递减.要求身高从每排从左到右递增(我将题意篡改了便于理解233),每列从前向后递增.每个人身高为1...n(n<=30)中的一个数 ...

  4. HDU 1208 Pascal's Travels 经典 跳格子的方案数 (dp或者记忆化搜索)

    Pascal's Travels Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Su ...

  5. HDU 1208 跳格子题(很经典,可以有很多变形)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1208 Pascal's Travels Time Limit: 2000/1000 MS (Java ...

  6. HDU 1176 免费馅饼 (类似数字三角形的题,很经典,值得仔细理解的dp思维)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1176 免费馅饼 Time Limit: 2000/1000 MS (Java/Others)     ...

  7. poj 1012 Joseph (约瑟夫问题)

    Joseph Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 47657   Accepted: 17949 Descript ...

  8. Roman Roulette(约瑟夫环模拟)

    Roman Roulette Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  9. 洛谷P1996 约瑟夫问题【链表】

    题目:https://www.luogu.org/problemnew/show/P1996 题意: 约瑟夫环.每次取出第m个,第2m个...... 思路: 链表维护.[感觉很少有用到链表.]非常经典 ...

随机推荐

  1. linux 的 ping 原理

    ping命令的工作原理是: ping命令是用来查看网络上另一个主机系统的网络连接是否正常的一个工具. 他向网络上的另一个主机系统发送ICMP报文,如果指定系统得到了报文,它将把报文原样传回给发送者,这 ...

  2. PyQt写的浏览单web页面的browser - 开源中国社区

    PyQt写的浏览单web页面的browser - 开源中国社区 PyQt写的浏览单web页面的browser

  3. 人生新开始——第一天上班

    今天是我正式上班的第一天,对今天要做的工作充满期待,对将要面对的同事们也充满期待.这天起的很早,7点钟就开始睡不着了,忙着起来整理东西,看着时间还早,便打开电脑听起CNN News,练习听力,一听就听 ...

  4. Android实现视频录制

    安卓实现视频录制,有两种方法,一种是调用自带的视频功能,一种是使用MediaRecorder. 每种方法都有自己的优缺点.接下来,把两种方法的代码写出来. 先说第一种方法,也是最简单的方法,那就是直接 ...

  5. 下载xcode 6 beta.dmg

    太大.无法上传到csdn上,百度网盘下载 http://pan.baidu.com/s/1eQtcV7c

  6. DevExpress ASP.NET 使用经验谈(3)-XPO对象的使用(使用指定数据连接)

    首先,我们贴出上一节Users类XPO对象的保存代码,直接建立的XPO Session会话,因为没有与我们所期望的数据层建立绑定, 所以程序自动创建了一个Access数据库,作为默认数据库操作对象来使 ...

  7. WordPress创建过程

    最近php需要用php开发项目, 闲来无事,就研究了php,但是发了WordPress模板,这模板真心强大,简单易学好用, 好了直接正如正题 首先第一步 登录官网WordPress http://cn ...

  8. struct 如何存储指针类型的值

    通过 __unsafe_unretained标示符标示指针类型的值,否则xcode会报以下错误(前提,你使用的是ARC模式): ARC forbids Objective-C objects in s ...

  9. windows上的tomcat配置

    下载及安装 首先要安装JDK:jdk-7windows-x64.zip 再安装tomcat:apache-tomcat-7.0.23-windows-x64.zip   配置环境变量: CATALIN ...

  10. OD调试篇1—Hello

    OD调试篇1—Hello 要求:通过OD将程序的标题“I love fishc.com”改为“I love you” 一.找到程序的标题“I love fishc.com” 1.把程序拖到OD运行出现 ...