zoukankan      html  css  js  c++  java
  • 特别困的学生 UVa12108(模拟题)

    一、题目

    课堂上有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
    ", ++T, t);
    35     }
    36     return 0;
    37 }
  • 相关阅读:
    HDU 1249 三角形
    HDU 1799 循环多少次?
    UVA 12219-Common Subexpression Elimination
    POJ 2253-Frogger(最小生成树的最大权)
    OpenCV之参数不匹配问题
    vs2017-关于配置属性管理器的问题
    D
    圆桌会议
    F
    B
  • 原文地址:https://www.cnblogs.com/lfri/p/9357495.html
Copyright © 2011-2022 走看看