书上具体所有题目:http://pan.baidu.com/s/1hssH0KO

代码:(Accepted,0 ms)

//UVa12108 - Extraordinarily Tired Students
#include<iostream>
struct how_cute_my_sleepy_boys_are {
int a,//awaken period : a>=1;
b,//sleeping period : b<=5;
s,//state : 0醒着,1睡觉;
t;//time : 睡/醒到什么时候;
}g[12];
int n, c, mi, cnt, T = 0;//cnt:统计睡着的人;mi:minute int main()
{
//freopen("in.txt", "r", stdin);
while (scanf("%d", &n) && n != 0) {
for (int I = 0;I < n;++I) {//读入数据
scanf("%d%d%d", &g[I].a, &g[I].b, &c);
g[I].s = (c > g[I].a ? 1 : 0);
g[I].t = (g[I].s ? g[I].a + g[I].b - c + 1 : g[I].a - c + 1);
}
for (mi = 1;mi < 400;++mi) {//直接循环400分钟,不高兴做-1这一情况的循环检查了
cnt = 0;
for (int I = 0;I < n;++I)//计算本分钟的睡觉人数
if (g[I].s == 1) ++cnt;
if (!cnt) break;
for (int I = 0;I < n;++I) {//睡或醒状态转换
if (g[I].t != mi) continue;
if (g[I].s == 1) g[I].s = 0, g[I].t += g[I].a;
else if (cnt > n / 2) g[I].s = 1, g[I].t += g[I].b;
else g[I].t += g[I].a;
}
}
printf("Case %d: %d\n", ++T, !cnt ? mi : -1);
}
return 0;
}

题意:一个班级所有学生个个是特“困”生。每个人睡着和醒着有一定规律,那就是:醒着a分钟,然后想睡觉了,环顾四周,如果睡着的人比醒着的多,那我也睡,睡b分钟后再坚挺a分钟,否则直接再坚挺a分钟。简言之,也就是每醒a分钟就检查接下来是继续醒a分钟还是睡b分钟后再醒a分钟。(这“醒a分钟-睡b分钟”的a+b分钟被题目称为一个周期。)然后每个学生一上课就有个初始状态,是在各自醒-睡周期的第几分钟。求何时第一次全班醒着,还是说全班永远有人在睡觉。

分析:直接模拟每一分钟即可。struct一个结构体储存每个学生的状态,存放内容代码注释里已经很详细。本来t想存放的是还有几分钟到达目前状态的最后一分钟,但转念一想这样的话每分钟都要自减一次,直接存到哪一分钟更为便捷。具体模拟没用问题,很简单。

最大的问题是,就是老师上课永无天日的情况,永远没人醒着。本来我想做个数组存放每分钟的状态检查其是否构成循环,想想略麻烦,但是我看网上大家好多人都没检查,直接从一分钟检测到1000分钟(或其他很大的数字),1000分钟后还是没有全醒的情况就直接判定为“it’ll never happen”。的确不够严谨但是很方便。最后昨晚睡觉前想了下,决定使用这个不严谨的方案。理由如下:

  1. 本来这每一分钟的模拟运算量就很小,还要每一分钟都去循环判断,有循环且循环很短的情况下不错,但是如果循环有几百分钟或很久后找到全醒的情况,综合这些情况下好像并不很合算。
  2. 题目的状态转换并不复杂,1000分钟甚至更短(我用的400分钟就AC了)该循环的绝对能循环了,当然数学上肯定能求出个这个分钟的最小值,也没必要去搞吧。
  3. 谁上个课上1000分钟啊!!!我一开始循环的150分钟,也已经2.5个小时了,结果WA,改成400分钟,AC了。400分钟已经6.666小时了。嗯,可以,老师学生们都很666。。。
  4. 听谁说过:竞赛题没人看你的代码是否优美,它也不关心你的算法,只要通过就行。→.→适当投机有益身心健康哈(大雾)。
  5. 懒得写循环检查了哈哈>_<。

[刷题]算法竞赛入门经典(第2版) 4-8/UVa12108 - Extraordinarily Tired Students的更多相关文章

  1. [刷题]算法竞赛入门经典(第2版) 4-6/UVa508 - Morse Mismatches

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 代码:(Accepted,10 ms) //UVa508 - Morse Mismatches #include< ...

  2. [刷题]算法竞赛入门经典(第2版) 5-15/UVa12333 - Revenge of Fibonacci

    题意:在前100000个Fibonacci(以下简称F)数字里,能否在这100000个F里找出以某些数字作为开头的F.要求找出下标最小的.没找到输出-1. 代码:(Accepted,0.250s) / ...

  3. [刷题]算法竞赛入门经典(第2版) 5-13/UVa822 - Queue and A

    题意:模拟客服MM,一共有N种话题,每个客服MM支持处理其中的i个(i < N),处理的话题还有优先级.为了简化流程方便出题,设每个话题都是每隔m分钟来咨询一次.现知道每个话题前来咨询的时间.间 ...

  4. [刷题]算法竞赛入门经典(第2版) 4-5/UVa1590 - IP Networks

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 代码:(Accepted,0 ms) //UVa1590 - IP Networks #include<iost ...

  5. [刷题]算法竞赛入门经典(第2版) 6-7/UVa804 - Petri Net Simulation

    题意:模拟Petri网的执行.虽然没听说过Petri网,但是题目描述的很清晰. 代码:(Accepted,0.210s) //UVa804 - Petri Net Simulation //Accep ...

  6. [刷题]算法竞赛入门经典(第2版) 6-6/UVa12166 - Equilibrium Mobile

    题意:二叉树代表使得平衡天平,修改最少值使之平衡. 代码:(Accepted,0.030s) //UVa12166 - Equilibrium Mobile //Accepted 0.030s //# ...

  7. [刷题]算法竞赛入门经典(第2版) 6-1/UVa673 6-2/UVa712 6-3/UVa536

    这三题比较简单,只放代码了. 题目:6-1 UVa673 - Parentheses Balance //UVa673 - Parentheses Balance //Accepted 0.000s ...

  8. [刷题]算法竞赛入门经典(第2版) 5-16/UVa212 - Use of Hospital Facilities

    题意:模拟患者做手术. 其条件为:医院有Nop个手术室.准备手术室要Mop分钟,另有Nre个恢复用的床.准备每张床要Mre分钟,早上Ts点整医院开张,从手术室手术完毕转移到回复床要Mtr分钟.现在医院 ...

  9. [刷题]算法竞赛入门经典(第2版) 5-11/UVa12504 - Updating a Dictionary

    题意:对比新老字典的区别:内容多了.少了还是修改了. 代码:(Accepted,0.000s) //UVa12504 - Updating a Dictionary //#define _XieNao ...

随机推荐

  1. python复习。知识点小记

    1.对于单个字符的编码,Python提供了ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符: >>> ord('A') >>> ord('中' ...

  2. Redis基础学习(一)—Redis的安装

    一.Redis的安装 1.在Linux环境下安装gcc环境 yum install gcc-c++   2.解压缩Redis源码包 tar -zxf redis-3.0.0.tar.gz   3.编译 ...

  3. WebForm捆绑压缩js和css(WebForm Bundling and Minification)

    .net framework 4以上,可以使用Microsoft.AspNet.Web.Optimization 新建4.0项目 Nuget搜索optimization,安装第一个包 加入Bundle ...

  4. UEFI+GPT下安装Win10+Ubuntu16.04双系统

    安装环境 SSD+HDD双盘,Win10安装在SSD里,HDD分出来60G安装Ubuntu. 自行百度你的主板是否支持UEFI启动方式. Win10 下载Win10安装镜像.烧盘等步骤就不说了,重启后 ...

  5. struts2之拦截器

    1. 为什么需要拦截器 早期MVC框架将一些通用操作写死在核心控制器中,致使框架灵活性不足.可扩展性降低, Struts 2将核心功能放到多个拦截器中实现,拦截器可自由选择和组合,增强了灵活性,有利于 ...

  6. [JavaWeb]SpringSecurity-OAuth2.0 统一认证、资源分离的配置,用于分布式架构、模块化开发的认证体系

    前言 关于 OAuth2.0的认证体系,翻阅了好多资料,RCF 文档太多,看了一半就看不下去了,毕竟全英文的文档看起来,是有一点让我烦躁,但也对 OAuth2.0的认证流程有了一个基本的概念,之前用 ...

  7. MSMQ队列学习记录

    微软消息队列-MicroSoft Message Queue(MSMQ) 使用感受:简单. 一.windows安装MSMQ服务 控制面板->控制面板->所有控制面板项->程序和功能- ...

  8. Mac Hadoop2.7.2的安装与配置

    这里介绍Hadoop 2.7.2在mac下的安装与配置. 安装及配置Hadoop 首先安装一下Hadoop $ brew install Hadoop 配置ssh免密码登录 用dsa密钥认证来生成一对 ...

  9. HashMap负载因子

    下面是HashMap的一个构造函数,两个参数initialCapacity,loadFactor 这关系HashMap的迭代性能. /** * Constructs an empty <tt&g ...

  10. AngularJS入门教程:日期格式化

    AngularJS入门教程:日期格式化[转载] 本地化日期格式化: ({{ today | date:'medium' }})Nov 24, 2015 2:19:24 PM ({{ today | d ...