首页 > 其他分享 >题解 CF1840D【Wooden Toy Festival】

题解 CF1840D【Wooden Toy Festival】

时间:2023-06-20 10:14:33浏览次数:42  
标签:std 覆盖 Wooden 题解 ll Festival 答案 inf define

不妨设 \(a\) 单调递增(无重复),显然如果 \(n\le 3\) 答案就是 \(0\)。

显然答案 \(k\) 具有可二分性。也就是说,当 \(k < k_0\) 时一定不存在合法的 \(x,y,z\),当 \(k\ge k_0\) 时一定存在,\(k_0\) 就是答案。

因此二分答案,只需要验证答案 \(k\) 是否存在合法的 \(x,y,z\)。

为了覆盖到 \(a_1\),且 \(x\) 尽量往大取(这样可以覆盖更多的 \(a_i\)),我们令 \(x=a_1+k\)。接下来一段区间的 \(a_i\) 会被 \([x-k,x+k]\) 覆盖,我们跳过这段区间,找到下一个未被覆盖的 \(a_i\)。类似于刚刚的思路,我们令 \(y=a_i+k\),再找到下一个未被覆盖的 \(a_j\),令 \(z=a_j+k\)。如果此时所有 \(a_i\) 都被覆盖了,那么就合法,否则不合法。

时间复杂度 \(\mathcal O(n\log w)\),其中 \(w\) 为值域。

//By: OIer rui_er
#include <bits/stdc++.h>
#define rep(x,y,z) for(ll x=(y);x<=(z);x++)
#define per(x,y,z) for(ll x=(y);x>=(z);x--)
#define debug(format...) fprintf(stderr, format)
#define fileIO(s) do{freopen(s".in","r",stdin);freopen(s".out","w",stdout);}while(false)
using namespace std;
typedef long long ll;

mt19937 rnd(std::chrono::duration_cast<std::chrono::nanoseconds>(std::chrono::system_clock::now().time_since_epoch()).count());
ll randint(ll L, ll R) {
    uniform_int_distribution<ll> dist(L, R);
    return dist(rnd);
}

template<typename T> void chkmin(T& x, T y) {if(x > y) x = y;}
template<typename T> void chkmax(T& x, T y) {if(x < y) x = y;}

const ll N = 2e5+5, inf = numeric_limits<ll>::max();

ll T, n, a[N];

bool check(ll M) {
    ll x = a[1] + M, y = inf, z = inf;
    rep(i, 1, n) {
        if(abs(a[i] - x) <= M);
        else if(y == inf) y = a[i] + M;
        else if(abs(a[i] - y) <= M);
        else if(z == inf) z = a[i] + M;
        else if(abs(a[i] - z) <= M);
        else return false;
    }
    return true;
}

int main() {
    for(scanf("%lld", &T); T; T--) {
        scanf("%lld", &n);
        rep(i, 1, n) scanf("%lld", &a[i]);
        sort(a+1, a+1+n);
        n = unique(a+1, a+1+n) - a - 1;
        if(n <= 3) {puts("0"); continue;}
        ll L = 0, R = a[n] - a[1] + 1;
        while(L < R) {
            ll M = (L + R) >> 1;
            if(check(M)) R = M;
            else L = M + 1;
        }
        printf("%lld\n", L);
    }
    return 0;
}

标签:std,覆盖,Wooden,题解,ll,Festival,答案,inf,define
From: https://www.cnblogs.com/ruierqwq/p/CF-1840D.html

相关文章

  • Codeforces Round 879 (Div. 2) 题解
    寄!大!了!Rating-=124.(恼)https://codeforces.com/contest/1834C.GamewithReversing发现\(\text{rev}(S)\toS\)和\(\text{rev}(T)\toT\)本质上是一样的。赛时就一个劲的对着\(S\)操作,,,。我们考虑单点修改在\(S\)上做,翻转操作在\(T\)上做。设\(\displaysty......
  • [ABC216G] 01Sequence 题解
    01Sequence题目大意构造一个满足\(m\)个形如\((l,r,x)\)的限制条件的\(01\)序列,其中\((l,r,x)\)表示区间\([l,r]\)的和不小于\(x\),你需要保证序列中\(1\)的个数最小。思路分析贪心的想,如果我们将限制按右端点排序,那么当遍历到一个区间,发现现有的和不满足限制条件......
  • 题解:【AT Educational DP Contest-O】 Matching
    题目链接来点位运算优化,目前也是拿下了洛谷最优解,比第二名快一倍:#include<bits/stdc++.h>#defineintlonglong#definebtp(x)__builtin_popcount(x)#definelowbit(x)((x)&(-x))usingnamespacestd;namespaceFastIO{template<typenameT=int>inlineTread()......
  • SecureCRT连接慢的问题解决
    选定SSH2,选择Authentication,勾选Password,然后将该选项上移,挪到第一位即可 修改SecureCRT配置目录(C:\Users\manager\AppData\Roaming\VanDyke\Config\)的Sessions子目录下对应的服务器ini配置文件,GSSAPIMethod设置的值为none,重启SecureCRT,连接贼快   原贴:1、https:/......
  • Tuxedo服务无法启动的问题解决(涉及MP下tlisten和TLOG的报错)
    今天同事说有一个Tuxedo应用在做测试,但重启了机器和Tuxedo环境后,服务仍无法启动,这次的问题排查和处理比较典型,值得梳理一次。应用环境:OS:SunOS5.9Tuxedo:9.1,MP双机环境问题现象:由于服务不可用,之前有同事使用kill干掉了一些Tuxedo进程,但无法确定具体范围。重启了服务器和Tuxedo......
  • MySQL数据字典提示1146不存在的问题解决
    最近某套MySQL因为磁盘挂载问题,异常宕机,拉起后,数据库能正常访问了,但是在error.log一直提示这个错误,[ERROR]InnoDB:Table`mysql`.`innodb_table_stats`notfound.2021-09-03T08:26:52.446564Z2[ERROR]InnoDB:Fetchofpersistentstatisticsrequestedfortable`jira`.`c......
  • maltego的 卡 慢 没反应 的问题解决方法
    maltego的卡慢没反应的问题主要是因为它要在国外下载和认证一些东西,导致软件无法正常访问。解决方法:配置带理,软件内部就支持,打开选择设置,    选择手动指定,填入服务器ip和端口,我使用链接本地服务器带理,服务器要允许局域网连接,并且关闭服务器上的防火墙,如果......
  • AtCoder Beginner Contest 306 题解 A - E
    A-Echo题目大意给定一个字符串,需要把它每个字符重复输出。解题思路可以读完整个字符串,也可以按照字符读一个输出两个。ACCode#include<iostream>#include<algorithm>#include<cstring>#include<numeric>#defineendl'\n'#defineiosios::sync_with_stdio(fals......
  • 小程序授权常见问题解析及解决方案
    引言小程序作为一种轻便、易用的应用形式,正在成为许多企业和个人开发者的首选。在用户使用小程序时,需要授权相应的权限才能获取更好的使用体验。但是,有时会遇到授权失败或出现安全隐患等问题。本文将从常见问题的角度出发,为大家解析小程序授权常见问题及其解决方案。下午一直犯困吟......
  • 题解:【ABC168F】 . (Single Dot)
    题目链接挺套路的题。如果值域和线段数量同阶,可以预处理不能越过的线段,使用状压四个方向记录每个节点能不能往这个方向走,然后直接爆搜就好了,标记上能走到哪些地方。但这个值域一看就是没有救的,于是就要拿出来离散化了。把线段的横纵坐标都拎出来离散化,依然是同样的预处理,然后从离......