133 - The Dole Queue
来源:互联网 发布:反编译软件 编辑:程序博客网 时间:2024/06/08 01:58
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <cstring>
using namespace std;
int findhum(int* inpa, int* inpb, int k, int n, int st)
{
int num = k%n;
if(num == 0)
num = k;
int i;
int c = 1;
for(i = inpa[st];; i = inpa[i])
if(c++ == num)
return i;
}
void killi(int *inpa, int* inpb, int i)
{
inpa[inpb[i]] = inpa[i];
inpb[inpa[i]] = inpb[i];
return ;
}
int main ()
{
int n, k, m;
while(scanf("%d %d %d", &n, &k, &m) == 3 && n && k && m)
{
if(n == 1){
printf(" 1\n");
continue;
}
int a = n, b = 1;
int la [30];
int lb [30];
la[1] = 2;
lb[1] = n;
for(int i = 2; i < n; i++)
{
la[i] = i + 1;
lb[i] = i - 1;
}
la[n] = 1;
lb[n] = n-1 ;
int is_first = 1;
while(n)
{
if(is_first)
is_first = 0;
else
printf(",");
a = findhum(la, lb, k, n, a);
b = findhum(lb, la, m, n, b);
if(a == b)
{
printf("% 3d", a);
killi(la, lb, a);
n--;
}
else
{
printf("% 3d% 3d", a, b);
killi(la, lb, a);
if(la[a] == b){
la[a] = la[b];
lb[b] = lb[a];
}
if(lb[a] == b){
lb[a] = lb[b];
la[b] = la[b];
}
killi(lb, la, b);
n -= 2;
}
//printf("\n=%d %d=\n", la[a], lb[b]);
}
printf("\n");
}
return 0;
}
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <cstring>
using namespace std;
int findhum(int* inpa, int* inpb, int k, int n, int st)
{
int num = k%n;
if(num == 0)
num = k;
int i;
int c = 1;
for(i = inpa[st];; i = inpa[i])
if(c++ == num)
return i;
}
void killi(int *inpa, int* inpb, int i)
{
inpa[inpb[i]] = inpa[i];
inpb[inpa[i]] = inpb[i];
return ;
}
int main ()
{
int n, k, m;
while(scanf("%d %d %d", &n, &k, &m) == 3 && n && k && m)
{
if(n == 1){
printf(" 1\n");
continue;
}
int a = n, b = 1;
int la [30];
int lb [30];
la[1] = 2;
lb[1] = n;
for(int i = 2; i < n; i++)
{
la[i] = i + 1;
lb[i] = i - 1;
}
la[n] = 1;
lb[n] = n-1 ;
int is_first = 1;
while(n)
{
if(is_first)
is_first = 0;
else
printf(",");
a = findhum(la, lb, k, n, a);
b = findhum(lb, la, m, n, b);
if(a == b)
{
printf("% 3d", a);
killi(la, lb, a);
n--;
}
else
{
printf("% 3d% 3d", a, b);
killi(la, lb, a);
if(la[a] == b){
la[a] = la[b];
lb[b] = lb[a];
}
if(lb[a] == b){
lb[a] = lb[b];
la[b] = la[b];
}
killi(lb, la, b);
n -= 2;
}
//printf("\n=%d %d=\n", la[a], lb[b]);
}
printf("\n");
}
return 0;
}
0 0
- 133 - The Dole Queue
- 133 - The Dole Queue
- 133 - The Dole Queue
- 133 - The Dole Queue
- 133 - The Dole Queue
- 133 - The Dole Queue
- 133 - The Dole Queue
- 133 - The Dole Queue
- 133 - The Dole Queue
- 133 - The Dole Queue
- UVa 133 The Dole Queue
- UVaOJ 133 - The Dole Queue
- Uva 133 The Dole Queue
- UVaOJ 133 - The Dole Queue
- uva 133 - The Dole Queue
- uva-133 - The Dole Queue
- UVa 133 - The Dole Queue
- uva 133 The Dole Queue
- SVN版本控制与分支设置
- C语言编程需要注意的64位和32机器的区别
- 开源项目学习:Android-Universal-Image-Loader-Part3
- 详解Android App AllowBackup配置带来的风险
- 简明 Vim 练级攻略
- 133 - The Dole Queue
- 【PLSQL】package包的使用
- hdu1568
- sqlite语句
- 二哥学算法之排序
- HDU 2670 Girl Love Value
- Haproxy配置文件详解
- 求10个数中最大值
- oc_study17--property的简便方式