📄 1179.cpp
字号:
/* This Code is Submitted by wywcgs for Problem 1179 on 2006-01-29 at 12:06:58 */
#include <cstdio>
#include <cstring>
const int MAX = 32;
class List {
private:
int next[MAX], prev[MAX];
bool e[MAX];
public:
void make(int);
void count(int&, int, bool) const;
void erase(int);
};
void List::make(int n) {
int i; next[0] = next[n] = 1; prev[n+1] = prev[1] = n;
for(i = 1; i < n; i++) next[i] = i+1, prev[i+1] = i;
memset(e, false, sizeof(e));
}
void List::count(int& b, int m, bool front) const {
int i;
for(i = 0; i < m; i++) {
if(front) b = next[b];
else b = prev[b];
if(e[b]) i--;
}
}
void List::erase(int m) {
prev[next[m]] = prev[m]; next[prev[m]] = next[m]; e[m] = true;
}
int main()
{
int n, m, k;
List l;
while(scanf("%d %d %d", &n, &k, &m) != EOF && n != 0) {
l.make(n);
int off1 = 0, off2 = n+1;
while(n != 0) {
l.count(off1, k, true); l.count(off2, m, false);
l.erase(off1); l.erase(off2);
n--; printf("%3d", off1);
if(off1 != off2) n--, printf("%3d", off2);
putchar(n == 0 ? '\n' : ',');
}
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -