ecjtu-summer training #5 F - And Then There Was One UVALive - 3882
2017-07-15 09:19
381 查看
题解:
先来探讨约瑟夫问题
常规做法是链表模拟.不多说
递推做法
分析:
第一次: 0.1.2 ..... k-1.k.k+1........n-1
去掉k - 1 0.1.2 ..... k.k+1........n-1
从k开始 k.k+1...... n-1.0.1........ k-2
转换 0.1..........n-2 (转换公式: ( i - k + n ) % n )
第二次 0.1..........n-2
去掉k - 1 0.1.2 ..... k.k+1........n-2
从k开始 k.k+1...... n-2.0.1........ k-2
转换 0.1..........n-3 (转换公式: ( i - k + n - 1 ) % ( n - 1 ) )
........
第n次 0
反向递推
a = 0
第n次的0等价于第n-1次。最后一个删除的数 a = ( a + k ) % 2
a 等价于第n - 2次。最后一个删除的数 a = ( a + k ) % 3
......
a = ( a + k ) % n
那么递推公式出来了
再根据m - 1 与 k - 1 的相对位置判断即可
最后需要 + 1
代码:
先来探讨约瑟夫问题
常规做法是链表模拟.不多说
递推做法
分析:
第一次: 0.1.2 ..... k-1.k.k+1........n-1
去掉k - 1 0.1.2 ..... k.k+1........n-1
从k开始 k.k+1...... n-1.0.1........ k-2
转换 0.1..........n-2 (转换公式: ( i - k + n ) % n )
第二次 0.1..........n-2
去掉k - 1 0.1.2 ..... k.k+1........n-2
从k开始 k.k+1...... n-2.0.1........ k-2
转换 0.1..........n-3 (转换公式: ( i - k + n - 1 ) % ( n - 1 ) )
........
第n次 0
反向递推
a = 0
第n次的0等价于第n-1次。最后一个删除的数 a = ( a + k ) % 2
a 等价于第n - 2次。最后一个删除的数 a = ( a + k ) % 3
......
a = ( a + k ) % n
那么递推公式出来了
a = 0; for( int i = 2; i <= n; i ++ ) a = ( a + k ) % i;
再根据m - 1 与 k - 1 的相对位置判断即可
最后需要 + 1
代码:
#include<bits/stdc++.h>
using namespace std;
#define pb push_back
#define mp make_pair
#define se second
#define fs first
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define pii pair<int,int>
#define ll long long
int main()
{
int n, m, k;
while( scanf( "%d%d%d", &n, &k, &m ) && n + m + k )
{
int a = 0; for( int i = 2; i <= n; i ++ ) a = ( a + k ) % i;
m --;
int b = k - 1;
b %= n;
a = ( m - b + a + n ) % n;
printf( "%d\n", a + 1 );
}
return 0;
}
相关文章推荐
- UVALive 3882 And Then There Was One
- And Then There Was One UVALive - 3882
- UVALive3882-And Then There Was One-约瑟夫问题-递推
- UVALive - 3882 And Then There Was One (递推[dp])
- UVALive 3882 And Then There Was One
- UVALive - 3882 And Then There Was One 约瑟夫的变形问题
- UVALive - 3882:And Then There Was One
- uva live 3882 And Then There Was One 约瑟夫环
- UVALive - 3882 And Then There Was One (约瑟夫环变形)@
- UVALive 3882 And Then There Was One 约瑟夫环问题
- UVALive 3882 And Then There Was One 约瑟夫环问题
- UVALive 3882 - And Then There Was One【约瑟夫问题】
- UVA 1394 And Then There Was One / Gym 101415A And Then There Was One / UVAlive 3882 And Then There Was One / POJ 3517 And Then There Was One / Aizu 1275 And Then There Was One (动态规划,思维题)
- UVa 3882 - And Then There Was One 递推------------无力orz
- UVa 3882 And Then There Was One(stl+有技巧的模拟||数学方法+约瑟夫问题)
- UVa 3882 - And Then There Was One 递推------------无力orz
- 约瑟夫问题变形 And Then There was One, LA 3882 递推 动态规划
- LA - 3882 - And Then There Was One(dp)
- UVA 1394 POJ 3517 And Then There Was One (双向循环链表和递推)
- 约瑟夫问题变形 And Then There was One, LA 3882 递推 动态规划