[ABC347C] Ideal Holidays题解
[ABC347C] Ideal Holidays题解
题意翻译:
在 \(AtCoder\) 王国中,一个周有 \(A+B\) 天。其中在一周中, \([1,A]\) 天是假日, \([A+1,B]\) 天是工作日。
高桥有 \(N\) 个计划,第 \(i\) 个计划安排在 \(i\) 天后。他不知道今天是周几,但他想知道是否能将计划都安排在假期中;
若可以则打印Yes,否则打印No。
题意解释:
如下图,黄绿色的是假期,红色的是假期。

高桥的安排在这个区间中,对此我们可以进行一个状态压缩,也就是把所有的天数对 \(A+B\) 取模,压缩到一个周内;
即:
int sum=a+b; //存储A+B
for(int i=1;i<=n;i++){
scanf("%d",d[i]); //输入
d[i]%=sum; //压缩到一周内
}
若有大于 \(A\) 的,便输出No ,于是我们可以写出第一版代码:
#define seq(q, w, e) for (int q = w; q <= e; q++)
#define ll long long
using namespace std;
const int maxn = 2e5+10;
ll n,a,b,sum,num;
ll d[maxn];
signed main()
{
scanf("%lld",&n);
scanf("%lld%lld",&a,&b);
sum=a+b;
seq(i,1,n){
scanf("%lld",&num);
d[i]=num%sum;
}
seq(i,1,n){
if(d[i]>a){
printf("No");
return 0;
}
}
printf("Yes");
return 0;
}
但是会发现错的有点多,这是为啥呢?
我们可以看到,由于高桥不知道今天是周几,所以直接比较行不通。
于是我们想到第二种思路:
用其中最大值减最小值,即求一个区间,看这个区间是否在 \(A\) 以内即可。
即可写出第二版代码:
#define seq(q, w, e) for (int q = w; q <= e; q++)
#define ll long long
using namespace std;
const int maxn = 2e5+10;
ll n,a,b,sum,num;
ll d[maxn];
signed main()
{
scanf("%lld",&n);
scanf("%lld%lld",&a,&b);
sum=a+b;
seq(i,1,n){
scanf("%lld",&num);
d[i]=num%sum;
}
sort(d+1,d+1+n);
num=d[n]-d[1]+1; //区间值
if(num>a){ //区间不在A之内
printf("No");
return 0;
}
printf("Yes");
return 0;
}
但还是会错一个点,这又是为啥呢?
因为如果其跨度超过 \(B\) 我们可以放到下周去做。
如: 使 \(A=2,B=5,N=2,D[]=\{1,7\}\) 对与我们第二种做法,区间值应为 \(7\) ,\(7>A(2)\) ,应输出No。
但如果我们假设今天是周一,第一个计划在本周二实现,第二个计划在下周一实现的话,其实是可行的。
为了解决上面的问题,我们要分类讨论一下:
\(sum<=A\) 绝对可以实现,直接输出
Yes;\(sum>A\) :
1.若相邻两个元素的差有一个大于 \(B\) 则可以实现,直接输出
Yes; (按大小排序,且区间在 \([A,A+B]\) 之间,如果有一个差大于 \(B\) ,则后面的元素于此元素的差都大于 \(B\) )
2.若相邻两个元素的差都小于 \(B\) 则不可以实现,输出
No;
根据上面的分析,我们可在二思路上改进一下,即可得出正确代码:
#define seq(q, w, e) for (int q = w; q <= e; q++)
#define ll long long
using namespace std;
const int maxn = 2e5+10;
ll n,a,b,sum;
ll d[maxn];
signed main()
{
scanf("%lld",&n);
scanf("%lld%lld",&a,&b);
sum=a+b;
seq(i,1,n){
scanf("%lld",&d[i]);
d[i]%=sum;
}
sort(d+1,d+1+n);
sum=d[n]-d[1]+1;
if(sum>a){ //区间不在A之内
seq(i,1,n-1){
if(d[i+1]-d[i]-1>=b){ //若有一个差大于B
printf("Yes");
return 0;
}
}
printf("No");
return 0;
}
printf("Yes");
return 0;
}
总的来说,本题对做题者的细心程度非常考察,本蒟蒻在做时吃了九遍罚时,在此感谢 @LiJoQiao 前辈提供思路。
[ABC347C] Ideal Holidays题解的更多相关文章
- CF670A Holidays 题解
Content 假设 \(1\) 年有 \(n\) 天,而每周同样会有 \(5\) 天工作日和 \(2\) 天休假.求一年最小的休假天数和最大休假天数. 数据范围:\(1\leqslant n\leq ...
- Codeforces Gym 100187D D. Holidays 排列组合
D. Holidays Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100187/problem/D ...
- usaco training 4.1.2 Fence Rails 题解
Fence Rails题解 Burch, Kolstad, and Schrijvers Farmer John is trying to erect a fence around part of h ...
- Codeforces Round #350 (Div. 2) A. Holidays 水题
A. Holidays 题目连接: http://www.codeforces.com/contest/670/problem/A Description On the planet Mars a y ...
- 【例题 6-20 UVA - 1599】Ideal Path
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 逆向做一遍bfs. 得到终点到某个点的最短距离. 这样,我们从起点顺序的时候. 就能知道最短路的下一步是要走哪里了. 这样,我们从起 ...
- 虚树总结&题单&简要题解
简介 虚树,即剔除所有无关结点,只保留询问点和询问点的相关结点(两两之间的LCA),建一棵新树,这棵新树就是虚树.通过虚树,可以有效的减小询问(甚至修改)的复杂度.设询问点的个数是\(k\),那么建虚 ...
- Codeforces Round #436 (Div. 2) 题解864A 864B 864C 864D 864E 864F
A. Fair Game time limit per test 1 second memory limit per test 256 megabytes input standard input o ...
- POJ2482 Stars in Your Window 题解
Fleeting time does not blur my memory of you. Can it really be 4 years since I first saw you? I stil ...
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
随机推荐
- 优秀的 RocketMQ 可视化管理工具 GUI 客户端
优秀的 RocketMQ 可视化管理工具 GUI 客户端 官网地址:http://www.redisant.cn/rocketmq 快速查看所有 RocketMQ 集群,包括Brokers.Topic ...
- linux Makefile 如何将生成的 .o 文件放到指定文件夹
一.Makefile文件 为了方便分析,直接上文件,Makefile 文件中的内容如下所示: # # Makefile # 编译的.o文件和.c文件在同一路径下 # $(info "star ...
- Multisim 教程
Multisim 教程 Multisim主要是用来做电路图绘制.仿真的程序.本教程介绍Multisim的功能和使用方法. Multisim 界面简介 Multisim是电路设计套件里完成电路图绘制和仿 ...
- golang之UrlEncode编码/UrlDecode解码
为什么需要编码和解码 1.是因为当字符串数据以url的形式传递给web服务器时,字符串中是不允许出现空格和特殊字符的: 2.因为 url 对字符有限制,比如把一个邮箱放入 url,就需要使用 urle ...
- Typora最后的免费版本0.11.18
Typora最后的免费版本为0.11.18. 之后的1.x开始收费. 免费版本0.11.18的百度网盘链接如下(永久链接): 链接:https://pan.baidu.com/s/1XizAD0SFp ...
- fastposter v2.15.0 从繁琐到简单,简洁好用的海报生成器
fastposter v2.15.0 从繁琐到简单,简洁好用的海报生成器 从繁琐到简单,简洁好用的海报生成器 我很高兴向大家推荐一款令人兴奋的工具--Fastposter海报生成器.作为一名开发者,我 ...
- Mark Lee:Splashtop 如何成为最新的 10 亿美元估值技术独角兽
从左至右:Splashtop联合创始人Rob.Philip.Mark和Thomas Splashtop 刚刚完成了由我们的长期投资者 Sapphire Ventures 领投的 5000 万美元的新融 ...
- 高性能远程桌面Splashtop 居家办公首选软件
2020年,新冠疫情期间,各地提倡远程办公.居家办公.在家里怎么使用办公室的电脑?以Splashtop为代表的远程桌面控制软件也就被越来越多的人知晓和使用了. 什么是Splashtop远程桌面? Sp ...
- (图形界面)Dbever连接MySQL8 报错mysql8 安装The server time zone value '�й���ʱ��' is unrecognized or represents more than one time zone.
问题原因是没有设置时区,这个在Mysql8中会有 解决方式: 在这个位置加上UTC时区就可以了. IDEA添加方式 设置Advanced的allowPublicKeyRetrieval为true 同时 ...
- 【漏洞通报】WEB VIDEO PLATFORM疑似存在未授权访问漏洞
漏洞描述 WEB VIDEO PLATFORM是一个基于GB28181-2016标准实现的开箱即用的网络视频平台,负责实现核心信令与设备管理后台部分,支持NAT穿透,支持海康.大华.宇视等品牌的IPC ...