Extraordinarily Tired Students UVA - 12108(简单模拟)

题目比较好理解 链接→ Uva 12108

理解:

题目介绍很有意思,有兴趣可以看一下 ヾ(≧▽≦*)o

1.没有第0分钟,起始是第1分钟
2.每个学生检查睡觉人数是否严格大于清醒人数时,以上一分钟为标准
3.所有学生观察的时间我们认为同时且瞬时
4.第一次写,想不用flag中不…后来发现这样就不满足同时了…)唉还是太菜了…)
5.无限长 ⇨ 1000000 mins
AC水码:

//#include "stdafx.h"
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <string>
#include <sstream>
#include <vector>
#include <set>
#include <map>
#include <stack>
#include <queue>
using namespace std;
const int Time = 1e6;

int main() {
	int cp = 0, n;
	int a[15], b[15], c[15];
	while (cin>>n && n) {

		bool sleep[15];//标记变量
		int num;//the number of sleeps.
		for (int i = 0; i < n; i++) {
			cin >> a[i] >> b[i] >> c[i];
			if (c[i]>a[i]) sleep[i] = 1;
		}
		int t = 1;
		for (; t < Time; t++) {

			if (t > 1)
				for (int i = 0; i < n; i++) {
				
					if (c[i] == a[i])
						if (num > n/2) sleep[i] = true; else c[i] = 0;

					else if (c[i] == a[i] + b[i]) 
						c[i] = 0,sleep[i] = false;
					
					c[i]++;
				}

			num = 0;//每分钟统计一次
			for (int i = 0; i<n; i++)  if (sleep[i]) num++;
			if (num == 0) break;
		}

		printf("Case %d: %d\n", ++cp, (num ? -1 : t));
	}
	return 0;
}

武汉加油!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值