HDU3700 Cat 恶心模拟题

2023-05-16

Problem Address:http://acm.hdu.edu.cn/showproblem.php?pid=3700


【前言】


终于又A了一道恶心的模拟题。

看来HDU恶心题还是蛮多的。


【思路】


扫描一遍,如果有时间段大于b的,则输出No。

时间段是不会重叠的。所以先按时间段排序。

如果间隔时间大于a,则先休息。把休息的时间段记录起来。

否则把下一段时间归并到当前时间段。

同时判断当前时间段是否大于b,是则输出No。

如果最后一个时间段的结束时间与第一个时间的开始时间的间隔大于等于a,说明可以分割。

否则需要查看当前时间段是否可以连接到第一个时间段前面。

注意,如果休息的时间段跨夜,则直接输出,如:23:00-1:00(不需要分成两段写)。

如果没有休息的时间段,则应输出No。


【代码】


#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

const int maxn = 20;
const int day = 24*60;

struct node
{
    int s;
    int e;
}pt[maxn+5];

vector<node>v;

bool cmp(const node &a, const node &b)
{
    return a.s<b.s;
}

void show(node temp)
{
    printf("%d%d:%d%d-%d%d:%d%d\n", temp.s/600, temp.s/60%10, temp.s%60/10, temp.s%10, temp.e/600, temp.e/60%10, temp.e%60/10, temp.e%10);
}

int main()
{
    int a, b;
    int n;
    int i;
    bool fail;
    char str[20];
	node temp, x;
    while(scanf("%d %d", &a, &b)!=EOF)
    {
        a *= 60;
        b *= 60;
        scanf("%d", &n);
        for (i=1; i<=n; i++)
        {
            scanf("%s", str);
            pt[i].s = (str[0]-'0')*600+(str[1]-'0')*60+(str[3]-'0')*10+(str[4]-'0');
            pt[i].e = (str[6]-'0')*600+(str[7]-'0')*60+(str[9]-'0')*10+(str[10]-'0');
            if (pt[i].e<pt[i].s) pt[i].e += day;
        }
        sort(pt+1, pt+n+1, cmp);
		v.clear();
		fail = false;
		for (i=1; i<=n; i++)
		{
			if (pt[i].e-pt[i].s+1>b)
			{
				fail = true;
				break;
			}
		}
		if (!fail)
		{
			temp.s = pt[1].s;
			temp.e = pt[1].e;
			for (i=1; i<n; i++)
			{
				if (pt[i+1].s-1-temp.e>=a)
				{
					x.s = temp.e+1;
					x.e = pt[i+1].s-1;
					if (x.s!=x.e) v.push_back(x);
					temp.s = pt[i+1].s;
					temp.e = pt[i+1].e;
				}
				else
				{
					temp.e = pt[i+1].e;
					if (temp.e-temp.s+1>b)
					{
						fail = true;
						break;
					}
				}
			}
		}
		if (!fail)
		{
			if (pt[1].s+day-1-temp.e>=a)
			{
				x.s = (temp.e+1)%day;
				x.e = (pt[1].s-1+day)%day;
				if (x.s!=x.e) v.push_back(x);
			}
			else if (v.size()>0 && (v[1].s-1+day)%day-temp.s+1<=b)
			{
			}
			else fail = true;
		}
		if (fail || v.size()==0)
			printf("No\n");
		else 
		{
			printf("Yes\n%d\n", v.size());
			sort(v.begin(), v.end(), cmp);
			for (i=0; i<v.size(); i++)
				show(v[i]);
		}
    }
    return 0;
}


【代码】


继续寻找恶心的模拟题……



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HDU3700 Cat 恶心模拟题 的相关文章

随机推荐

  • 解密微信电脑版image文件夹下缓存的用户图片

    我们的微信体积越来越大 xff0c 该怎样查看 xff1f 该怎样为其减肥哪 xff1f 重点来了 在微信缓存中 FileStorage 文件夹时发现了其目录下的 Image 文件夹 xff0c 可能是使用过程中缓存的聊天图片等 xff0c
  • 怎么寻找微信撤回的图片

    1 回顾 自从发布文章 寻找微信撤回的图片 之后 xff0c 骗了不少粉啊 总之 xff0c 之前提出了一种可以找到微信撤回图片的方法 2 真相 之前的说法是 xff0c 工程师并没有真正把撤回的图片删除 xff0c 而是加密后藏起来了 其
  • 电脑端微信文件的存储位置在哪?

    在微信聊天中会产生很多文件 xff0c 首先微信的文件存放位置 xff1a 默认情况下 c users administrator document wechat files xxx 以下所有文件截图都是从这个父级目录开始的 示例图 Bac
  • 微信的dat文件正确打开方式及问题处理

    微信的dat文件是微信用于缓存PC端微信的图片 xff0c 然后对图片进行了加密的处理 所以是可以删除的 xff0c 有些朋友data文件夹下有十几G的 xff0c 都是可以删除的 xff0c 但是最好确保这些文件都已经没有用处了再进行删除
  • 微信中的dat文件到底是什么

    微信dat文件是表示电脑上微信聊天记录数据文件 xff0c 可以选择删除 虽然删除这些文件并不会影响微信的正常使用 xff0c 但是如果需保留电脑端微信的聊天记录 xff0c 重要的材料则不要删除 微信 xff08 WeChat xff09
  • 2022年2月11日

    P3375 模板 KMP字符串匹配 题目描述 给出两个字符串 s 1s1 和 s 2s2 xff0c 若 s 1s1 的区间 l r l r 子串与 s 2s2 完全相同 xff0c 则称 s 2s2 在 s 1s1 中出现了 xff0c
  • 网易云音乐NCM格式转化为mp3

    前段时间帮朋友下歌放在车上听 结果好多都是ncm格式 xff0c 伤心 xff0c 搜索了下发现基本上这格式解密有好多昂 xff0c 可惜UI我都不太想要 决定抄一下 xff0c 自己做一个 这里先记录下核心代码 xff0c 回头补充个UI
  • 旧电脑怎么升级到新版Win10

    Windows 10 2020年5月更新是最新版的win10系统 xff0c 相比以往的win10有了许多的改进 xff0c 比如说新的Cortana应用 云端重置以及Linux 2的Windows子系统等等 而Windows搜索的改进 x
  • K12教育小初高各个版本教材内的章节数据

    一个 相对 权威的资源网站 xff0c 然后把这个网站上的所有章节 教材全部爬下来 xff0c 进行保存数据库 xff0c 用于我们后续教学方面的基础数据 先说下结果 xff1a 算上小学 初中 高中三个学段 xff0c 所有学科下共计51
  • 1-FreeSwitch-CentOS7安装freeswitch1.10.2

    文章目录 一 前言二 安装2 1 安装 96 96 96 noarch 96 96 96 2 2 96 96 96 处理安装源 96 96 96 2 3 安装 96 96 96 cmake 96 96 96 2 4 安装 96 96 96
  • 「Python语法结构」输出语句示例(1)

    打印 玩具列表 字符串 功能要求 在屏幕上打印出 玩具列表 这样 实例代码 print 39 玩具列表 39 print 34 玩具列表 34 print 39 39 39 玩具列表 39 39 39 print 34 34 34 玩具列表
  • wsl导致vmmem占用高解决办法

    自从装了wsl我这个年迈的电脑就更加吃力 xff0c 尤其是内存基本上都要占到90 以上 xff0c 打开任务管理器一看内存一半以上都是被vmmem吃掉了 xff0c 于是在网上寻找解决办法 xff0c 并记录优化过程 文章目录 定期执行缓
  • wsl配置java环境以及使用vscode调试

    记录如何在wsl中配置java编译环境 xff0c 以及如何使用vscode进行编译调试 文章目录 下载jdk下载maven配置环境变量使用vscode调试java 下载jdk 点击进入到oracle jdk的下载页面 选择合适的安装包 解
  • python pip 打包指南

    一个成功的开源项目的其核心功能是打包功能 xff0c 而出色的打包功能的关键在于版本控制 因为项目是开源的 xff0c 所以您希望发布的包能够体现出开源社区所具备的优点 不同的平台与语言具有不同的打包机制 xff0c 本文主要讲述的是 Py
  • 虚拟机安装WIN系统后无法启动

    在虚拟机里安装完WINDOWS操作系统后 xff0c 无法启动 xff08 当然是GHOST版本 xff09 xff0c 启动时提示 xff1a Network boot from AMD Am79C970A Copright c 2003
  • VMware Esxi 8.0 直通Nvidia P40显卡

    目录 一 前言 二 错误信息 三 解决过程 一 前言 接到一个客户需求 xff0c 想在Esxi上直通Nvidia P40显卡 xff0c 直通后无法打开虚拟机 二 错误信息 下图是错误信息 xff0c 如图所示 xff0c 任务名称 打开
  • iOS 不规则瀑布流

    iOS 自从出了UICollectionview之后 界面的样式可谓更加的多元化 对于一些较为复杂的界面UICollectionview都可以相对轻松的实现 而且由于其 FlowLayout 子类的存在 界面的布局更可谓是随心所欲 下面就来
  • php7.4 docker 安装mongodb扩展

    Dockerfile 下面的pecl install mongodb的就是安装命令 FROM php 7 4 12 fpm RUN mv etc apt sources list etc apt sources list bak COPY
  • linux下wireshark安装和使用

    Wireshark是世界上最流行的网络分析工具 这个强大的工具可以捕捉网络中的数据 xff0c 并为用户提供关于网络和上层协议的各种信息 与很多其他网络工具一样 xff0c Wireshark也使用pcap network library来
  • HDU3700 Cat 恶心模拟题

    Problem Address xff1a http acm hdu edu cn showproblem php pid 61 3700 前言 终于又A了一道恶心的模拟题 看来HDU恶心题还是蛮多的 思路 扫描一遍 xff0c 如果有时间