算法习题---4-8特别困的学生(UVa12108)
一:题目
课堂上有n个学生(n<=),每个学生上课都会出现一个“清醒-睡眠”周期,其中第i个学生学习Ai分钟后睡眠Bi分钟,依次重复。其中在从清醒到睡眠时有一个条件:只有到全班睡眠人数大于清醒人数时,这个学生才敢睡觉。
题目使用(A,B,C)来描述一个学生的信息,A是该学生的清醒时间,B是该学生的睡眠时间,C是该学生的初始状态值(即在初始时是这个周期的第几分钟)
问经过多久,所有人都清醒,当然也可能不存在这个时间,就输出-.
(一)案例详解
学生人数
清醒2分钟 睡眠4分钟 初始状态是在周期第1分钟
清醒1分钟 睡眠5分钟 初始状态是在周期第2分钟
清醒1分钟 睡眠4分钟 初始状态是在周期第3分钟

(一)样例输入
3 学生人数
2 4 1 清醒2分钟 睡眠4分钟 初始状态是在周期第1分钟
1 5 2 清醒1分钟 睡眠5分钟 初始状态是在周期第2分钟
1 4 3 清醒1分钟 睡眠4分钟 初始状态是在周期第3分钟
(二)样例输出
Case :
Case : -
二:代码实现
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string> #define CLASSTIME 1000000 //设置课程时间最大 int sNum; //学生人数1-10
int a[], b[], c[]; //记录各个学生的初始信息
获取学生信息
int getStuInfo()
{
scanf("%d", &sNum);
if (!sNum)
return ;
getchar(); for (int i = ; i <= sNum; i++)
{
scanf("%d %d %d", &a[i], &b[i], &c[i]);
getchar();
} return ;
}
获取全部学生清醒的时刻(真正开始上课的时间)
int getRealStuTime()
{
int count;
for (int i = ; i < CLASSTIME;i++)
{
count = ;
for (int j = ; j <= sNum; j++) //先获取睡觉人数
if (c[j] > a[j]) //在睡觉
count++;
if (count == ) //全部在学习
return i;
for (int j = ; j <= sNum; j++) //更新状态
{
if (c[j] == a[j] + b[j] || (c[j] == a[j] && count < sNum - count)) //一个周期 或者 如果睡觉人数少于学习人数,则不敢睡觉,开始重新学习
c[j] = ;
c[j]++; //更新每个学生的状态
}
}
return -;
}
主函数
void main()
{
int n = ;
FILE* fp = freopen("data8.in", "r", stdin);
freopen("data8.out", "w", stdout); while (getStuInfo())
printf("Case %d: %d\n", n++, getRealStuTime()); freopen("CON", "r", stdin);
freopen("CON", "w", stdout);
}
算法习题---4-8特别困的学生(UVa12108)的更多相关文章
- 特别困的学生 UVa12108(模拟题)
一.题目 课堂上有n个学生(n<=10).每个学生都有一个“睡眠-清醒”周期,其中第i个学生醒Ai分钟后睡Bi分钟,然后重复(1<=Ai,Bi<=5),初始第i个同学处于他的周期的C ...
- UVa 12108 特别困的学生
https://vjudge.net/problem/UVA-12108 题意:给出n个学生的“清醒—睡眠”周期和初始时间点,每个学生在睡眠时需要判断全班睡觉人数是否严格大于清醒人数,否则在坚持一个清 ...
- 【算法习题】数组中任意2个(3个)数的和为sum的组合
题1.给定一个int数组,一个数sum,求数组中和为sum的任意2个数的组合 @Test public void test_find2() { int[] arr = { -1, 0, 2, 3, 4 ...
- 算法习题---5-4交换学生(UVa10763)
一:题目 有一组学生,他们手中分别有自己学校和想要去的目标学校(A,B).为了成功的交换学生,必须保证这一组学生中必须每两个人之间满足 s1 (A,B) 和 s2 (B,A).即两者原来和目标学校相对 ...
- July 算法习题 - 字符串4(全排列和全组合)
https://segmentfault.com/a/1190000002710424 思想:当前层各节点首元素不同,则各节点的剩余元素也不同:下一层节点交换范围为首元素以外的元素 全排列算法: vo ...
- 【算法笔记】B1038 统计同成绩学生
1038 统计同成绩学生 (20 分) 本题要求读入 N 名学生的成绩,将获得某一给定分数的学生人数输出. 输入格式: 输入在第 1 行给出不超过 105 的正整数 N,即学生总人数.随后一行给 ...
- 算法习题---4-9数据挖掘(Uva1591)
一:题目 这是最懵逼的一道题,什么鬼......... [刷题]算法竞赛入门经典(第2版) 4-9/UVa1591 - Data Mining(详细题目看这个吧,不想多说) 二:代码实现 #defin ...
- tarjan算法 习题
dfs树与tarjan算法 标签(空格分隔): 517coding problem solution dfs树 tarjan Task 1 给出一幅无向图\(G\),在其中给出一个dfs树\(T\), ...
- 【算法习题】正整数数组中和为sum的任意个数的组合数
1.递归实现(参考:https://blog.csdn.net/hit_lk/article/details/53967627) public class Test { @org.junit.Test ...
随机推荐
- Union-Find(并查集): Quick union算法
Quick union算法 Quick union: Java implementation Quick union 性能分析 在最坏的情况下,quick-union的find root操作cost( ...
- Burp Suite的代理Brup Proxy的使用详解
Burp Proxy 是Burp Suite以用户驱动测试流程功能的核心,通过代理模式,可以让我们拦截.查看.修改所有在客户端和服务端之间传输的数据.
- Python高级编程和异步IO并发编程(笔记)
一.魔法函数 # 例子 class Company(object): def __init__(self, employee_list): self.employee = employee_list ...
- 微信公众号调用外部浏览器打开指定URL链接是如何实现的
在涉及移动端支付的项目时,由于对支付需求的精细化,不仅需要扫码支付,还有唤醒App支付,另外还有在微信.QQ.支付宝内置浏览器给出相应的提示. 好在国内各大巨头公司在开发浏览器的时候都在浏览器标识上加 ...
- Hello 2019【A,B,C】
#include<bits/stdc++.h> using namespace std; #define int long long signed main(){ string str; ...
- IDEA打开项目时,java文件左下角J图标的问题
idea打开项目时,所有的java文件左下角出现J图标,如下图: 说明项目的资源路径配置有问题,打开Project Structure,如下图: 进行资源路径配置,即可解决问题,正确配置如下:
- mongodb 集群配置文件
本文档是在mongodb为3.4下编写的,仅作为参考,详细内容请参考:https://docs.mongodb.com/manual/reference/configuration-options/# ...
- saltstack 基础模块
Salt 在 linux 系统下 基础操作 1.更改权限 # salt 2.更改用户 # salt '172.16.3.9' file.chown /root/test test test 3.复制文 ...
- arm 环境下安装selenium+chrome
1. 升级软件 apt-get update 2. 安装pip apt-get install python3-pip 3. 安装selenium pip3 install selenium .4. ...
- SAM:后缀自动机
好文转载 luoguP3804 代码: /* 定义.对给定字符串s的后缀自动机是一个最小化确定有限状态自动机,它能够接收字符串s的所有后缀. 对给定字符串s的后缀自动机是一个最小化确定有限状态自动机, ...