困倦的学生

/*
 * 大学生活十分滋润,每天晚上的夜生活更是令人向往,然而在一个丰富的夜生活过后,第二天却不得不面对在课堂上睡觉这种非常惬意但是又惊心动魄的事情。
 *
 * 在一堂高数课上,刚刚经历“夜生活”的n名大学生十分困倦,想要趁机睡觉,然而他们又害怕被老师发现,扣除平时分,所以他们想出了一个策略,就是每听a分钟的课,睡b分钟。然后再听a分钟的课,再睡b分钟,以此类推。我们将这样a+b构成的时间称之为一个周期。
 *
 * 但是!他们都很胆小,害怕睡觉的人数太少,被抓住之后被当成典型来杀鸡儆猴,所以他们在每次准备睡觉的时候,都会再看一下现在睡觉的人数是否大于清醒的人数(哪怕睡觉的人数和听课的人数相等也不敢睡觉),只有在这个时候他才可以放心大胆的睡觉。否则他们会选择再等a分钟看看是否满足条件。
 *
 * 现在请你写出一个程序,来求出经过多少时间之后,所有学生都在清醒状态。
 * Input
 * 输入有多组。
 *
 * 每组数据的第一行是一个整数n(0 <= n <= 10),代表高数课上有n名学生。若n为0,则代表输入结束,你什么都不必输出。
 *
 * 之后的n行每行有三个整数a、b、c。
 * 其中第i行的数据代表第i名学生每经过a分钟就会查看是否满足睡觉条件,满足就睡b分钟,不满足则接着等待a分钟。高数课开始时,这名学生正处在这个睡觉周期的第c分钟。(数据保证1 <= a <= 5且1 <= b <= 5,并且每组数据都是正确的)
 * Output
 * 每组数据你应当首先输出"Case #: ",#代表目前是第几组数据。请注意,Case和#之间有一个空格,冒号与输出的数字之间也有一个空格。
 *
 * 然后输出一个整数,代表在高数课开始多长时间之后,所有学生都处于清醒状态。
 * 如果无论经过多长时间所有学生都不可能都处于清醒状态,请输出-1。
 * Sample Input
 * 3
 * 2 4 1
 * 1 5 2
 * 1 4 3
 * 3
 * 1 2 1
 * 1 2 2
 * 1 2 3
 * 0
 * Sample Output
 * Case 1: 18
 * Case 2: -1
 * Hint
 * 提示:
 * ①你可以认为如果在很长的时间之内(比如1000000)都没有所有人都处在清醒状态的情况的话,那么之后也不会出现这种情况。
 * ②每个周期都从第1分钟开始,意思是说:如果a为1,b为1,那么当c为1时,说明刚开始他是清醒的。
 * ③判断是否睡觉与上一分钟的睡觉人数有关。
 * ④本题翻译自英语,你可以点击下面的PDF字样,找到英文原版pdf格式的题目。
 * */
#include<string.h>
#include<stdio.h>
struct str{
    int a,b,c;
    int wake;
}arr[20];
int n;
int sleep;
void timepass(int i)//记录下一时间人睡觉
{
    arr[i].c++;
    if(arr[i].c<=arr[i].a)
        arr[i].wake=1;
    if(arr[i].c==arr[i].a+1)
    {
        if(sleep*2>n)//满足一半人都睡觉
            arr[i].wake=0;
        else
        {
            arr[i].c=1;
            arr[i].wake=1;
        }
    }
    if(arr[i].c==arr[i].a+arr[i].b+1)//一个周期之后
    {
        arr[i].c=1;
        arr[i].wake=1;
    }
}
int main()
{
    int i;
    int ns;//统计下一分钟睡觉的人
    int count=0;//记录case的次数
    while(scanf("%d",&n)&&n)
    {
        sleep=0;
        count++;
        memset(arr,0,sizeof(arr));
        for(i=0;i<n;i++)
        {
            scanf("%d %d %d",&arr[i].a,&arr[i].b,&arr[i].c);
            if(arr[i].c>arr[i].a)
                sleep++;//统计开始睡的人
        }
        if(sleep==0)//没人睡觉
        {
            printf("Case %d: 1\n",count);
            continue;
        }
        int flag=0;
        for(int j=2;j<100000;j++)//从第而分钟开始
        {
            ns=0;
            for(i=0;i<n;i++)
            {
                timepass(i);
                if(arr[i].wake==0)
                    ns++;//统计下一分钟睡觉的人
            }
            if(ns==0)//下一分钟没人睡觉
            {
                printf("Case %d: %d\n",count,j);
                flag=1;
                break;
            }
            sleep=ns;//全部人都便利之后,sleep和ns交换,sleep就变成上一秒
        }
        if (flag==0)//没有人清醒
            printf("Case %d: -1\n",count);
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值