毒瘤C题,考场卡我1个小时

首先,这道题难点在哪里?它的最大值与最小值都是浮动的

怎么办?把最小/最大值固定!

以把最小值固定为例,我们枚举每个音符,并枚举它使用哪条琴弦,将它此时的位置强制其作为最小值(设为\(minx\))。

同时,我们令其他音符不作为最小值,即其他的音符的位置不能小于最小值。

接下来,我们只需计算每个音符的最小位置(但不小于最小值),在这些音符中取 \(\max\) 即可。

直接的想法是枚举其他的所有音符,寻找满足 \(b_i-a_j \ge minx\) 最大 \(a_j\) (此时 \(b_i-a_j\) 最小)。

很明显,这样做是 \(O(n)\) 的。然而,我们要枚举 \(6n\) 个最小值,时间复杂度为\(O(n^2)\) (把常数项省掉了)…

略加思考,我们发现并不是所有的音符都要枚举一遍。我们把\(a、b\)数组分别从小到大排序,并把\(a\)数组去重(原因后面讲),那么最悲惨的音符(雾) 肯定是那些可以用 \(a_{j-1}\) 的琴弦,但正好用不了 \(a_j\) 的琴弦的音符最大的一个。当然,如果存在音符连 \(a_1\) 都用不了,直接判定当前最小值不合法,并枚举下一个最小值。

举个例子:\(a\)数组为 \([1,3,5]\) (去重以后),\(b\)数组为 \([4,5,6,6,7]\),\(minx\)为\(3\)。

那么,\(5、7\)是最悲惨的音符,因为\(5\)是可以用琴弦\(a_1\)但用不了琴弦\(a_2\)(有\(4、5\)两个音符)中最大的音符,\(7\)是可以用琴弦\(a_2\)但用不了琴弦\(a_3\)中最大的音符。显然,最大的位置将在最悲惨的音符中产生。

由于我们对 \(b\) 数组排过序,因此对每一条琴弦,直接二分查找最大的 \(b_i\) ,使 \(b_i-a_j < minx\) 即可。

于是,我们只要找到这些音符即可。这些音符最多不超过\(6\)个。时间复杂度 \(O(n \log n)\) 。

最后说一句,为什么\(a\)要去重?因为我们要找可以用 \(a_{j-1}\) 的琴弦但用不了 \(a_j\) 的琴弦的音符,如果存在重复,即 \(a_{j-1}=a_j\) ,则可能这个音符 \(a_{j-1}\) 的琴弦、 \(a_j\) 的琴弦都用不了,明显不符。

\(Code:\)

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
typedef long long ll;
ll a[10],n,b[100010],pos[10],cnt;
ll ans=1e18;
int main(){
for(int i=1;i<=6;i++) scanf("%lld",&a[i]);
sort(a+1,a+7);cnt=unique(a+1,a+7)-a-1;//去重
cin>>n;
for(int j=1;j<=n;j++) scanf("%lld",&b[j]);
sort(b+1,b+n+1);
for(int i=1;i<=n;i++){
for(int j=1;j<=cnt;j++){
ll minx=b[i]-a[j],maxn=0,last=0; //枚举minx
if(b[1]-a[1]<minx) goto fail;
for(int k=2;k<=cnt;k++){
last=lower_bound(b+last+1,b+n+1,minx+a[k])-b-1;//二分查找
maxn=max(maxn,b[last]-a[k-1]);//更新最大位置
}
for(int k=cnt;k>=1;k--){
if(b[n]-a[k]>=minx){
maxn=max(maxn,b[n]-a[k]); //最大的音符特殊处理一下
break;
}
}
ans=min(ans,maxn-minx);//更新答案
fail:;
}
}
cout<<ans<<endl;
return 0;
}

CF1413C Perform Easily 题解的更多相关文章

  1. Codeforces Round #679 (Div. 2, based on Technocup 2021 Elimination Round 1)

    考场上只做出来四道,第二天一早就写出来了E,蛮绝望的. A Finding Sasuke 水构造 #include <cstdio> #include <algorithm> ...

  2. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  3. 《ACM国际大学生程序设计竞赛题解Ⅰ》——基础编程题

    这个专栏开始介绍一些<ACM国际大学生程序设计竞赛题解>上的竞赛题目,读者可以配合zju/poj/uva的在线测评系统提交代码(今天zoj貌似崩了). 其实看书名也能看出来这本书的思路,就 ...

  4. usaco training 4.2.3 Job Processing 题解

    Job Processing题解 IOI'96 A factory is running a production line that requires two operations to be pe ...

  5. 题解——CodeForces 438D The Child and Sequence

    题面 D. The Child and Sequence time limit per test 4 seconds memory limit per test 256 megabytes input ...

  6. leetcode & lintcode 题解

    刷题备忘录,for bug-free 招行面试题--求无序数组最长连续序列的长度,这里连续指的是值连续--间隔为1,并不是数值的位置连续 问题: 给出一个未排序的整数数组,找出最长的连续元素序列的长度 ...

  7. Codeforces Round #468 Div. 2题解

    A. Friends Meeting time limit per test 1 second memory limit per test 256 megabytes input standard i ...

  8. 题解【Codeforces438D】The Child and Sequence

    题目描述 At the children's day, the child came to Picks's house, and messed his house up. Picks was angr ...

  9. Not Adding - 题解【数学,枚举】

    题面 原题链接(CF1627D) You have an array \(a_1,a_2,-,a_n\) consisting of \(n\) distinct integers. You are ...

随机推荐

  1. Salesforce Javascript(二) 箭头函数

    本篇参考:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/Arrow_functions 我们在 ...

  2. 深入解读 ASP.NET Core 身份认证过程

    长话短说:上文我们讲了 ASP.NET Core 基于声明的访问控制到底是什么鬼? 今天我们乘胜追击:聊一聊ASP.NET Core 中的身份验证. 身份验证是确定用户身份的过程. 授权是确定用户是否 ...

  3. 【漏洞复现】WinRAR目录穿越漏洞(CVE-2018-20250)复现

    前言 这漏洞出来几天了,之前没怎么关注,但是这两天发现开始有利用这个漏洞进行挖矿和病毒传播了,于是想动手复现一波. WinRAR 代码执行相关的CVE 编号如下: CVE-2018-20250,CVE ...

  4. 使用Cadence绘制PCB流程

    转载:https://blog.csdn.net/hailin0716/article/details/47169799 之前使用过cadence画过几块板子,一直没有做过整理.每次画图遇到问题时,都 ...

  5. OpenCV图像加载与保存

    OpenCV中的图像加载与保存 头文件是包含的库,在GitHub上下载的 imread("图片路径",图片加载方式) 图片加载方式: IMREAD_GRAYSCALE 灰度图像 I ...

  6. CRUD,分页,排序,搜索与AngularJS在MVC

    下载source - 53.1 MB 介绍 在选择最新的技术时,有几个因素会起作用,包括这些技术将如何与我们的项目集成.这篇文章解决了开始使用AngularJS和MVC的乞丐的问题.这篇文章告诉使用语 ...

  7. Django ORM 引发的数据库 N+1 性能问题

    背景描述 最近在使用 Django 时,发现当调用 api 后,在数据库同一个进程下的事务中,出现了大量的数据库查询语句.调查后发现,是由于 Django ORM 的机制所引起. Django Obj ...

  8. centos8平台redis5的主从同步搭建及sentinel哨兵配置

    一,规划三台redis的ip:一主二从 redismaster01: 172.18.1.1 主 redisslave01: 172.18.1.2 从 redisslave02: 172.18.1.3 ...

  9. python的部分GUI模块简介tkinter、pyqt5(Qt Designer)

    笔者认为,这两个作为Python3较为常用且简单的GUI模块,是Python开发者所必须学习至少是了解的. 其中tkinter为Python3自带的GUI模块,而pyqt5则需要通过pip insta ...

  10. C# Webservice中如何实现方法重载--(方法名同名时出现的问题)

    本文摘抄自:http://blog.sina.com.cn/s/blog_53b720bb0100voh3.html 1.Webservice中的方法重载问题(1)在要重载的WebMethod上打个M ...