刚开始看到题有点蒙,不过看到数据范围很小时就开始笑了。直接暴力解法,挺简单的。

思路:a+b为单个学生的awaken-sleeping周期T。将所有学生周期T的最小公倍数LCMT找出,则在LCMT分钟以后所有学生的状态集合会重复,即LCMT分钟内包含了所有可能发生的学生状态。用一个bool类型二维数组存储每个学生当前的状态。然后循环遍历即可,如在某一分钟醒着的学生数量大于等于睡着的学生数量,那么总体状态一定会在此时逐渐回复到全员清醒。

原题:

代码:

#include<iostream>
#include<algorithm>
#include<string>
#include<sstream>
#include<cstring>//memset
using namespace std;
bool flag[10][4000];
struct student
{int a,b,c;student(int a=0,int b=0,int c=0){this->a=a;this->b=b;this->c=c;}
};
int gcd(int a,int b)//欧几里得算法
{return b==0?a:gcd(b,a%b);
}
int lcm(int a,int b)
{return a*b/gcd(a,b);
}
int main(void)
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int n,kase=1;while(cin>>n&&n){memset(flag,0,sizeof(flag));student S[11];for(int i=0;i<n;i++){cin>>S[i].a>>S[i].b>>S[i].c;}int LCMT=S[0].a+S[0].b;for(int i=1;i<n;i++){LCMT=lcm(LCMT,S[i].a+S[i].b);}for(int i=0;i<n;i++)//循环存储状态{int judge=S[i].c-1;const int mod=S[i].a+S[i].b;for(int j=0;j<LCMT+10;j++,judge++){if(judge%mod<S[i].a){flag[i][j]=true;}else{flag[i][j]=false;}}}int time=-10,num=0;for(int j=0;j<LCMT+10;j++)//加10是防止在最后一刻醒着的人数大于等于睡着人数{num=0;for(int i=0;i<n;i++){if(flag[i][j]){num++;}}if(num>=(n+1)/2){time=j;break;}}cout<<"Case "<<kase++<<": ";if(time>=0){int max=time;for(int i=0;i<n;i++)//在满足条件的那一刻往后搜寻找到完全清醒的时刻{if(!flag[i][time]){for(int j=time;j<LCMT+10;j++){if(flag[i][j]){if(j>max){max=j;}break;}}}}cout<<max+1<<endl;}else{cout<<-1<<endl;}}return 0;
}

Uva12108 Extraordinarily Tired Students相关推荐

  1. [UVA12108]Extraordinarily Tired Students(模拟+水题)

    最近在填紫书上的坑(以前由于浮躁没有做的习题),发现还是有很多题比较麻烦,虽然思路很容易想,但就是写不出ac代码,可能这就是眼高手低吧.希望在接下来的学习生活中,从小事做起,向着自己的目标而努力吧. ...

  2. 12108 - Extraordinarily Tired Students(特别困的学生)

    题目: When a student is too tired, he can't help sleeping in class, even if his favorite teacher is ri ...

  3. UVA12108-4.8(ti)-Extraordinarily Tired Students

    UVA12108-4.8(ti)-Extraordinarily Tired Students 题目描述: https://uva.onlinejudge.org/index.php?option=c ...

  4. HDU 2932 Extraordinarily Tired Students (暴力+取模还是很强大的)

    题目链接:HDU 2932 Extraordinarily Tired Students 题意:给出N个学生的状态,(a,b,c).a表示a分钟这醒着,b表示b分钟睡着,c表示刚开始是重周期(a+b) ...

  5. 习题4-8 特别困的学生(Extraordinarily Tired Students,ACM/ICPC Xi'an 2006,UVa12108)

    原题链接:https://vjudge.net/problem/UVA-12108 分类:函数 备注:简单模拟 注意:刚要入睡的时候观察的是上一分钟的情况. 代码如下 #include<stdi ...

  6. 特别困的学生(Extraordinarily Tired Students, ACM/ICPC Xi'an 2006, UVa12108)

    #include <cstdio> #include<iostream> using namespace std;struct student {int wake;int sl ...

  7. UVA12108 特别困的学生 Extraordinarily Tired Students 题解

    题意翻译 课上有(n≤10) 个学生,每个人都有个"清醒-睡眠"周期,每个人都是先清醒Ai 分钟,然后睡Bi分钟,然后重复(1≤A*,B≤5) ,初始时第 i 个学生处在他的周期的 ...

  8. UVA 12108 Extraordinarily Tired Students

    思路: ①用结构体stu,属性有清醒时间,睡眠时间,开始处于的时间,状态(醒着还是睡着), 还有计数器. ②二维数组存表格. ③在确定接下来要进入的状态之后,就一次把表格里持续状态的数据都修改掉,比如 ...

  9. uva 12108 Extraordinarily Tired Students(特别困的学生)

    题目大意: 课堂上有n(n<=10)个学生,每个学生都有一个"睡眠-清醒""周期,其中第i个学生清醒Ai分钟后睡Bi分钟,然后重复(1<=Ai,Bi<= ...

最新文章

  1. TensorFlow分布式(多GPU和多服务器)详解
  2. 科学家揭秘大脑靠“旋转”区分过去和现在,还给了个AI架构设计新思路 | Nature子刊...
  3. shiro密码正确也会匹配错误_Shiro安全框架
  4. BlockChain:Scene application区块链场景应用集合
  5. 【PAT乙级】1078 字符串压缩与解压 (20 分)
  6. 异步请求中jetty处理ServletRequestListener的坑
  7. LeetCode 2016. 增量元素之间的最大差值
  8. roadhog不是内部或外部命令_git:git 不是内部或外部命令,也不是可运行的程序
  9. java执行多次post请求_同样的post请求代码在Java和android中执行结果不同。
  10. 经典书单 —— 人文社科
  11. Python基础——positional argument vs keyword argument
  12. qualys java 误报_从拒绝到接受 解析漏洞管理的五个阶段
  13. oracle ogg下载安装,牛刀小试Oracle GoldenGate--OGG安装(一)
  14. D3DXIntersectTri 求三角形与射线相交
  15. 基于arduino的WiFi无线传输
  16. [PDDL人工智能] 01.PDDL规划器安装及入门详解(规划领域定义语言)
  17. ABOUTCG发布Maya 刚体特效完全教程
  18. Scrapy爬虫入门教程十 Feed exports(导出文件)
  19. XGBOOST的基本原理以及使用
  20. 笔记本电脑电流声(滋啦滋啦声)解决方案

热门文章

  1. 算法分析与设计期末总结(安徽大学)
  2. 手机屏幕厂家信息软件_微软Surface Duo SwiftKey键盘更新 将允许键盘在两个屏幕上分割_华强北软件网_软件行情_软件新闻_软件评测_手机应用文章...
  3. ubuntu上安装qq
  4. 互联网摸鱼日报(2023-06-12)
  5. 完整的境外、港澳台、电信、移动、联通、教育网、国内其他ISP的IPv4列表(数据整理日期2022年4月)-IP列表太长只能份2篇发布(2/2)
  6. EXCEL点击一次,数值自动加一
  7. 网络搜索引擎与智能代理技术
  8. 3g显卡测试软件,3G网速测试细则
  9. 浅谈:定制网站如何防止被套路
  10. struts2获得所有actionlist