[刷题]算法竞赛入门经典(第2版) 4-8/UVa12108 - Extraordinarily Tired Students
书上具体所有题目: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”。的确不够严谨但是很方便。最后昨晚睡觉前想了下,决定使用这个不严谨的方案。理由如下:
- 本来这每一分钟的模拟运算量就很小,还要每一分钟都去循环判断,有循环且循环很短的情况下不错,但是如果循环有几百分钟或很久后找到全醒的情况,综合这些情况下好像并不很合算。
- 题目的状态转换并不复杂,1000分钟甚至更短(我用的400分钟就AC了)该循环的绝对能循环了,当然数学上肯定能求出个这个分钟的最小值,也没必要去搞吧。
- 谁上个课上1000分钟啊!!!我一开始循环的150分钟,也已经2.5个小时了,结果WA,改成400分钟,AC了。400分钟已经6.666小时了。嗯,可以,老师学生们都很666。。。
- 听谁说过:竞赛题没人看你的代码是否优美,它也不关心你的算法,只要通过就行。→.→适当投机有益身心健康哈(大雾)。
- 懒得写循环检查了哈哈>_<。
[刷题]算法竞赛入门经典(第2版) 4-8/UVa12108 - Extraordinarily Tired Students的更多相关文章
- [刷题]算法竞赛入门经典(第2版) 4-6/UVa508 - Morse Mismatches
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 代码:(Accepted,10 ms) //UVa508 - Morse Mismatches #include< ...
- [刷题]算法竞赛入门经典(第2版) 5-15/UVa12333 - Revenge of Fibonacci
题意:在前100000个Fibonacci(以下简称F)数字里,能否在这100000个F里找出以某些数字作为开头的F.要求找出下标最小的.没找到输出-1. 代码:(Accepted,0.250s) / ...
- [刷题]算法竞赛入门经典(第2版) 5-13/UVa822 - Queue and A
题意:模拟客服MM,一共有N种话题,每个客服MM支持处理其中的i个(i < N),处理的话题还有优先级.为了简化流程方便出题,设每个话题都是每隔m分钟来咨询一次.现知道每个话题前来咨询的时间.间 ...
- [刷题]算法竞赛入门经典(第2版) 4-5/UVa1590 - IP Networks
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 代码:(Accepted,0 ms) //UVa1590 - IP Networks #include<iost ...
- [刷题]算法竞赛入门经典(第2版) 6-7/UVa804 - Petri Net Simulation
题意:模拟Petri网的执行.虽然没听说过Petri网,但是题目描述的很清晰. 代码:(Accepted,0.210s) //UVa804 - Petri Net Simulation //Accep ...
- [刷题]算法竞赛入门经典(第2版) 6-6/UVa12166 - Equilibrium Mobile
题意:二叉树代表使得平衡天平,修改最少值使之平衡. 代码:(Accepted,0.030s) //UVa12166 - Equilibrium Mobile //Accepted 0.030s //# ...
- [刷题]算法竞赛入门经典(第2版) 6-1/UVa673 6-2/UVa712 6-3/UVa536
这三题比较简单,只放代码了. 题目:6-1 UVa673 - Parentheses Balance //UVa673 - Parentheses Balance //Accepted 0.000s ...
- [刷题]算法竞赛入门经典(第2版) 5-16/UVa212 - Use of Hospital Facilities
题意:模拟患者做手术. 其条件为:医院有Nop个手术室.准备手术室要Mop分钟,另有Nre个恢复用的床.准备每张床要Mre分钟,早上Ts点整医院开张,从手术室手术完毕转移到回复床要Mtr分钟.现在医院 ...
- [刷题]算法竞赛入门经典(第2版) 5-11/UVa12504 - Updating a Dictionary
题意:对比新老字典的区别:内容多了.少了还是修改了. 代码:(Accepted,0.000s) //UVa12504 - Updating a Dictionary //#define _XieNao ...
随机推荐
- 【前端调试手机页面】分享一款便捷的调试工具--spy-debugger
spy-debugger : 微信调试,各种WebView样式调试.手机浏览器的页面真机调试.便捷的远程调试手机页面.抓包工具,支持:HTTP/HTTPS,无需USB连接设备. github地址: ...
- CA/B Forum: SSL证书最长有效期最终被定为两年
这项新规将在2018年实施...... 随着CAB Forum第193号投票的通过,SSL行业将拥有更新更短的最长SSL证书有效期. 作为SSL行业的风向标,CAB Forum制定过许多行业规则,及规 ...
- 2017年要学习的JavaScript的顶级框架和主题
JavaScript的流行促进了一个非常活跃的由相关技术,框架和库组成的生态圈的发展.整个生态圈的多样性和活跃性越来越强,这让许多人变得越来越困惑. 你应该了解些什么技术呢? 我们应该将时间花费在 ...
- OpenCV局部变形算法探究
OpenCV是跨平台的强大的计算机视觉识别和图像处理的开源库,可以利用他来实现:模式识别.构建神经网络.深度学习,总之用途多多,入门级就先做一下图像处理吧! 基本的图像处理算法(图像灰阶化.二值化.仿 ...
- Vue.use自定义自己的全局组件
通常我们在vue里面使用别人开发的组件,第一步就是install,第二步在main.js里面引入,第三步Vue.use这个组件.今天我简单的也来use一个自己的组件. 这里我用的webpack-sim ...
- Luogu1486郁闷的出纳员【Splay】
P1486 郁闷的出纳员 题目描述 OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反 ...
- 【Egret】Wing3发布移动APP功能,打包APK流程以及会遇到的问题
流程:1.安装好wing 3,然后 插件--Egret项目工具--发布移动APP--Build android native project 2.配置发布环境: Android 1.egret eng ...
- kafka使用实例
定义一个procucer package cn.vko.common.kafka; import java.util.Properties; import org.apache.commons.lan ...
- 手机自动化测试:Appium代码之Logger
手机自动化测试:Appium代码之Logger poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.poptest推出手机自动化测 ...
- Android软键盘遮挡布局的那些事
有朋友提到软键盘遮挡布局的问题,说网上找了很多资料都未能解决,下面我来总结一下那些事,有些内容也是从网友那里学来的,但是我都会自己验证正确了才会贴出来. 首先来分析下我们常见的遮挡问题有哪些(本次所说 ...