博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVa 133 The Dole Queue
阅读量:6939 次
发布时间:2019-06-27

本文共 1174 字,大约阅读时间需要 3 分钟。

The Dole Queue

Time Limit: Unknown Memory Limit: Unknown

Total Submission(s): Unknown Accepted Submission(s): Unknown

UVa 133



Accepted Code

// Author : Weihao Long// Created : 2017/12/23#include "stdio.h"#define MAX 25int n, k, m, a[MAX];int go(int p, int d, int t) {    while (t--) {        do {            p = (p + d + n - 1) % n + 1;        } while (a[p] == 0);    }    return p;}int main() {    while (scanf("%d%d%d", &n, &k, &m) != EOF) {        if (n == 0)            break;        for (int i = 1; i <= n; i++)            a[i] = i;        int left = n;        int p1 = n, p2 = 1;        while (left) {            p1 = go(p1, 1, k);            p2 = go(p2, -1, m);            printf("%3d", p1);            left--;            if (p2 != p1) {                printf("%3d", p2);                left--;            }            a[p1] = a[p2] = 0;            if (left) {                printf(",");            }        }        printf("\n");    }    return 0;}

Notes

题意:

n 个人站成一圈,逆时针编号为 1~n 。有两个人,A 从 1 开始逆时针数,B 从 n 开始顺时针数。在每一轮中,A 数 k 个就停下来,B 数 m 个就停下来(注意两人可能数到同一个人)。接下来被选中的人( 1 个或 2 个)离开队伍.

思路:

先让 A 和 B 指好,接着把 A 所指的人剔除(编号置为 '0'),若 B 所指的和 A 不同,就再把 B 所指的人剔除。

感受:

代码中的 go 函数非常精炼,是解题的关键。

转载地址:http://kysnl.baihongyu.com/

你可能感兴趣的文章
linux下PHP网站安全加固方案
查看>>
使用apache搭建文件服务器
查看>>
手把手指南 Windows 路由和远程访问实现如何架设×××(二)
查看>>
CALayer1-简介
查看>>
css盒子学习记录
查看>>
Linux hugepage的配置方法
查看>>
文献综述
查看>>
linux网络编程中select/poll/epoll的比较分析
查看>>
java 从通过网址获取网页图片
查看>>
linux系统本地yum服务配置
查看>>
Jav词汇表(六)U——Z
查看>>
linux shell 数组建立及使用技巧
查看>>
图像处理之高斯一阶及二阶导数计算
查看>>
mysql5.5安装配置
查看>>
华为认证HCDA免费公开课课表及其交流群公告
查看>>
第14 章批量处理(Batch processing)
查看>>
形式语言之语言和语法树
查看>>
AWK 常用小技巧
查看>>
centos6.2-64位快速部署hadoop-1.0.4.tar.gz 和 jdk-7u17-linux-x64.tar.gz
查看>>
004-关闭文件后自动备份
查看>>