• 程序设计思维与实践 Week14 限时大模拟 (3/4/数据班)


    程序设计思维与实践 Week14 限时大模拟 (3/4/数据班)

    A - 猫睡觉问题

    将番的开始时间与结束时间以距零点的分钟数进行记录。

    记录持续醒着的时间段,若大于60则停止循环,输出No,否则遍历每个时间段,若空闲时间大于60,则这段时间用于睡觉,并更新last的起始时间与结束时间,若小于a60则不能睡觉,仅更新last的结束时间,last结束时间更新为当前播出时间的的结束时间。

    考虑最后一个时间段与第二天的第一个时间段之间的空闲时间。若不能用于睡觉,则当前清醒持续时间与我们在第一天考虑的第一段持续时间要长。

    问题分析

    遍历数字,输出不重复的数字的个数。

    #include <bits/stdc++.h>
    using namespace std;
    const int size=20+10;
    const int all=24*60;
    int a,b,n;
    struct Tim{
    	int be;
    	int en;
    	bool operator<(const Tim&b)
    	{
    		return be<b.be;
    	}
    };
    Tim be[size];
    Tim ans[size];
    int num;
    void solve()
    {
    	bool flag=true;
    	sort(be,be+n);
    	num=-1;
    	Tim last;
    	last.be=be[0].be;
    	last.en=be[0].en;
    	for(int i=1;i<n;i++)
    	{
    		if(last.en-last.be+1>b*60)
    		{
    			flag=false;break;
    		}
    		int temp=be[i].be-be[i-1].en-1;
    		if(temp>=a*60)
    		{
    			ans[++num].be=be[i-1].en+1;
    			ans[num].en=be[i].be-1;
    			last.be=be[i].be;last.en=be[i].en;
    		}
    		else
    			last.en=be[i].en;
    	}
    	if((last.en-last.be+1)>b*60)
    		flag=false;
    	if(flag)
    	{
    		if(be[0].be+all-last.en-1>=a*60)
    		{
    			ans[++num].be=(last.en+1)%all;
    			ans[num].en=(be[0].be-1+all)%all;
    		}
    		else if(num!=-1)
    		{
    			int temp=(ans[0].be-1+all)-last.be+1;
    			if(temp>b*60)flag=false;
    		}
    	}
    	if(!flag||num==-1)
    		printf("No
    ");
    	else
    	{
    		int h1,h2,m1,m2;
    		printf("Yes
    ");
    		printf("%d
    ",num+1);
    		for(int i=0;i<=num;i++)
    		{
    			h1=((ans[i].be%all)/60);
    			m1=ans[i].be%all%60;
    			h2=(ans[i].en%all)/60;
    			m2=ans[i].en%all%60;
    			printf("%02d:%02d-%02d:%02d
    ",h1,m1,h2,m2);
    		}
    	}
    }
    int main()
    {
    	int h1,h2,m1,m2;
    	while(scanf("%d%d%d",&a,&b,&n)!=EOF)
    	{
    		for(int i=0;i<n;i++)
    		{
    			scanf("%d:%d-%d:%d",&h1,&m1,&h2,&m2);
    			be[i].be=h1*60+m1;
    			be[i].en=h2*60+m2;
    			if(be[i].en<be[i].be)be[i].en+=all;
    		}
    		solve();
    	}
    	return 0;
    }
    
  • 相关阅读:
    第01组 Beta冲刺(2/5)
    第01组 beta冲刺(1/5)
    软工实践个人总结
    第01组 每周小结(3/3)
    第01组 每周小结(2/3)
    第01组 每周小结 (1/3)
    第01组_Beta冲刺总结
    第01组 Beta冲刺(5-5)
    第01组 Beta冲刺(4-5)
    第01组 Beta冲刺(3-5)
  • 原文地址:https://www.cnblogs.com/master-cn/p/13052652.html
Copyright © 2020-2023  润新知