算典04_例题_03_UVA-133
来源:互联网 发布:c 网络编程教程 编辑:程序博客网 时间:2024/06/05 03:31
The Dole Queue
题意
n(n<20)个人站成一圈,逆时针编号为1~n。有两个官员,A从1开始逆时针数,B从n开始顺时针数。在每一轮中,官员A数k个就停下来,官员B数m个就停下来(注意有可能两个官员停在同一个人上)。接下来被官员选中的人(1个或者2个)离开队伍。
输入n,k,m输出每轮里被选中的人的编号(如果有两个人,先输出被A选中的)。例如,n=10,k=4,m=3,输出为4 8, 9 5, 3 1, 2 6, 10, 7。注意:输出的每个数应当恰好占列。
题解
圆环的话自然要取模了,然后模拟选取的过程即可,注意使用一个标记数组标记哪些已经出队。
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int maxn = 1e2 + 5;#define met(a, b) memset(a, b, sizeof(a));int n, m, k;bool vis[maxn];int main() { #ifdef _LOCAL freopen("in.txt", "r", stdin); #endif while(scanf("%d%d%d", &n, &m, &k) == 3 && n && m && k) { met(vis, 0); int a = n, b = 1, ret = n; while(ret) { for(int i = 0; i < m;) { a = a%n+1; if(!vis[a]) ++i;} --ret; printf("%3d", a); for(int i = 0; i < k;) { b = (b+n-2)%n+1; if(!vis[b]) ++i;} if(b != a) --ret, printf("%3d", b); if(ret > 0) printf(","); vis[a] = vis[b] = 1; } printf("\n"); } return 0;}
0 0
- 算典04_例题_03_UVA-133
- 算典05_例题_03_UVA-10815
- 算典03_习题_03_Uva-1225
- 算典04_例题_01_UVA-1339
- 算典04_例题_02_UVA-489
- 算典04_例题_04_UVA-213
- 算典04_例题_05_UVA-512
- 算典04_例题_06_UVA-12412
- 算典03_例题_01_Uva-272
- 算典03_例题_02_Poj-2538
- 算典03_例题_03_HDU-1318
- 算典03_例题_04_Uva-340
- 算典03_例题_05_Uva-1583
- 算典03_例题_06_Uva-1584
- 算典05_例题_01_UVA-10474
- 算典05_例题_02_UVA-101
- 算典05_例题_04_UVA-156
- 算典05_例题_05_UVA-12096
- 异或运算交换两个数
- Android Animation 动画(一)--Tween动画
- python实现对以‘&’连接的参数串排序后计算md5
- [IOS APP]老梁故事汇(会)
- Activity的生命周期
- 算典04_例题_03_UVA-133
- No space left on device: AH00023: Couldn't create the proxy mutex 解决方法
- Hive内嵌模式和本地模式安装方法详解
- Android -- RecyclerView实现顶部吸附效果
- canvas绘图原理 非零环绕原则
- how to debug inputmethod
- Android中巧妙的位运算(Android源码中常见的一些flag的运算的理解)
- Spring实现定时任务方法
- Cookie 和 Session机制详解