特别困的学生 UVa12108(模拟题)

本文介绍了一个关于学生在课堂上的睡眠-清醒周期模拟问题,每个学生按照特定周期在睡眠和清醒状态间转换,条件是当全班清醒人数超过睡眠人数时才能进入睡眠状态。通过模拟整个过程,探讨了如何确定所有学生都处于清醒状态所需的时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、题目

课堂上有n个学生(n<=10)。每个学生都有一个“睡眠-清醒”周期,其中第i个学生醒Ai分钟后睡Bi分钟,然后重复(1<=Ai,Bi<=5),初始第i个同学处于他的周期的Ci分钟。每个学生在临睡前,只有全班睡觉人数严格大于清醒人数才睡觉,否则坚持Ai分钟后再检查。问经过多长时间全班都清醒,不存在输出-1.

二、解题思路

重点在于体会Ci的含义,Ci表示第i个同学在自身周期内所处的状态。模拟整个过程,注意时间取长点,但不要太长。

三、代码

 1 #include<stdio.h>
 2 #include<iostream>
 3 #include<string.h>
 4 using  namespace std;
 5 #define INF  10000
 6 const int maxn = 10 + 5;
 7 int A[maxn], B[maxn], C[maxn];
 8 
 9 int main()
10 {
11     int n,T = 0;
12     while (scanf("%d", &n) == 1 && n)
13     {
14         for (int i = 0; i < n; i++)
15             scanf("%d%d%d", &A[i], &B[i], &C[i]);
16         int t;
17         for (t = 1; t < INF; t++)    //从1开始的
18         {
19             int  cnt = 0;            //cnt代表当前清醒的人数
20             for (int i = 0; i < n; i++)
21                 if (C[i] <= A[i])
22                     cnt++;
23             if (cnt == n)  break;
24 
25             for (int i = 0; i < n; i++)
26             {
27                 //C[i]表示处于周期的C[i]分钟,注意所处状态的变化
28                 if (C[i] == A[i] + B[i] || (C[i] == A[i] && cnt >= n - cnt))
29                     C[i] = 0;
30                 C[i]++;
31             }
32         }
33         if (t == INF) t = -1;
34         printf("Case %d: %d\n", ++T, t);
35     }
36     return 0;
37 }

 

转载于:https://www.cnblogs.com/lfri/p/9357495.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值