UVa 144 - Student Grants

題目:有n個學生排隊取錢,取款機每次給的錢數是一個遞增序列,從1開始到k后又從1開始;

如果學生取夠40元就離開,否則回到隊尾,如果給的錢加上學生手中的錢多餘40,

剩下的錢給下一個人,請你輸出離開的序列編號。

分析:數據結構(DS),模擬。利用隊列模擬即可,注意如果剩下的錢沒被取走,就不會出新的錢。

說明:又是好長時間沒刷題╮(╯▽╰)╭。

#include <cstring>
#include <cstdio>

typedef struct _queue
{
	int id;
	int value;
	_queue(int I, int V) { id = I; value = V; }
	_queue(){}
}queue;
queue Q[1001],Temp;

int queue_head = 0;
int queue_tail = 0;

void queue_initial()
{
	queue_head = 0;
	queue_tail = 0;
	memset(Q, 0, sizeof(Q));
}

void queue_insert(queue a)
{
	Q[queue_tail ++] = a;
}

queue queue_delete()
{
	return Q[queue_head ++];
}

int main()
{
	int n, k;
	while (~scanf("%d%d",&n,&k) && n+k) {
		queue_initial();
		for (int i = 1; i <= n; ++ i)
			queue_insert(queue(i, 0));
		int value = 1,last = 1;
		while (n) {
			Temp = queue_delete();
			last = value;
			while (n && last+Temp.value >= 40) {
				last = last+Temp.value-40;
				printf("%3d",Temp.id);
				n --;
				if (last) Temp = queue_delete();
			}
			if (last) {
				Temp.value += last;
				queue_insert(Temp);
			}
			if(++ value > k)
				value = 1;
		}
		printf("\n");
	}
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-05 11:18:13

UVa 144 - Student Grants的相关文章

uva144 Student Grants

问题描述:每年学校通过自动发款机为每个学生发放40元的补助.补助的发放过程由两个部分构成:一个是自动发款机的工作过程,二是学生取款的过程. 自动发款机的工作过程是:发款机分为后台部分和前台部分.后台部分存有大量的1元的硬币.工作开始时后台先向前台传送1枚硬币,当硬币被分发给学生后,后台再向前台同时传送2枚硬币,硬币同时被分发后,后台再向前台同时传送3枚.....这样直到后台向前台传送的金额数达到前台的极限值k后,后台向前台传送的硬币金额数会重新变成1,再又一直到k.如此反复.设k = 3,则后台

queue/prioity_queue

queue/prioity_queue uva,144 1-25个学生,每人每年领40美元.一个防盗的atm机按照1.2...k的方式依次吐出硬币. 例如:第一次吐出1coin,第二次吐出2 coins 直到限制k.然后循环从1开始吐.学生插卡取钱,当达到限额就离开队列. 注意:只有当output store没钱了,才会向里面吐钱.所以每次学生最大领的钱数为k.没领到40继续排在末尾. 1 #include <iostream> 2 #include <cstdio> 3 #inc

第六讲 Block块语法及Block与数组的排序,ios字面量的使用(源代码上传)

1 #import <Foundation/Foundation.h> 2 3 4 #import "Student.h" 5 6 int c =200; 7 int main(int argc, const char * argv[]) { 8 @autoreleasepool { 9 /* 10 ------------------------------------- 11 定义block变量的四种方法 12 -----------------------------

Hibernate 一对多双向关联Demo

以Classes[班级]和Student[学生]为例的Demo //Classes.java public class Classes implements Serializable { private long cid; private String cname; private String cdesc; private Set<Student> students; //get和set } //Student .java public class Student implements Se

基于双向循环链表的学生管理系统

基于双向循环链表实现的学生管理系统,包括初始化,插入,删除,查抄,保存,自动按照姓名排序功能,退出并保存功能. 实现思想是将程序的各个部分划分为三个层次.主函数为界面层,即客户端层:其中后缀为Student的一般是某个功能的调度函数,属于逻辑层的内容:在调度函数之下有相应的被调度的函数,也就是相应功能的实现函数,一般后缀名为Node,意思就是这个函数直接操作链表中的结点,可以简单的划分为实现层: 这样分层实现呢有利于代码维护和个功能之间对包含或者重叠功能的直接调用,从而提高代码重用度,而降低代码

HOJ 题目分类

转自:http://blog.sina.com.cn/s/blog_65f3869301011a1o.html ******************************************************************************* 简单题(包括枚举,二分查找,(复杂)模拟,基础数据结构(栈.队列),杂题等 ****************************************************************************

uva 111 History Grading(DP初步应用)

uva 111 History Grading Many problems in Computer Science involve maximizing some measure according to constraints. Consider a history exam in which students are asked to put several historical events into chronological order. Students who order all

UVa 208 消防车(dfs+剪枝)

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=144 题意:给出一个n个结点的无向图以及某个结点k,按照字典序从小到大顺序输出从1到结点k的所有路径. 思路:如果直接矩阵深搜的话是会超时的,所以我们可以从终点出发,将与终点相连的连通块保存起来,这样dfs深搜时可以剪枝掉一些到达不了的点.只要解决了这个,dfs就是小问题. 这道题还有点坑的

[题解]UVa 12661 Funny Car Racing - spfa

很简单的一道最短路问题.分情况处理赛道的打开和关闭. Code 1 /** 2 * UVa 3 * Problem#12661 4 * Accepted 5 * Time:50ms 6 */ 7 #include<iostream> 8 #include<fstream> 9 #include<sstream> 10 #include<cstdio> 11 #include<cstdlib> 12 #include<cstring>