首页 > 其他分享 >AT_abc318_f [ABC318F] Octopus

AT_abc318_f [ABC318F] Octopus

时间:2024-02-17 20:22:48浏览次数:28  
标签:ABC318F le abc318 满足条件 int 位于 tot 头部 Octopus

首先考虑如何判断当头部位于 \(k_0\) 时是否可以抓住所有 \(n\) 个宝物。

显然可以排序后贪心将触手与宝藏配对。

然后考虑怎样的 \(k_0\) 作为分界点,即头部位于 \(k_0\) 满足条件而头部位于 \(k_0+1\) 不满足条件和头部位于 \(k_0\) 不满足条件而头部位于 \(k_0+1\) 满足条件的所有 \(k_0\)。

  • 头部位于 \(k_0\) 满足条件而头部位于 \(k_0+1\) 不满足条件

在这种情况下,一定有这样的 \(i,j\) 满足 \(k_0-L_j\le x_i \le k_0+L_j\) 且 \(k_0+1-L_j >x_i\) 或 \(k_0+1+L_j < x_i\)。

解不等式得 \(k_0=x_i+L_j\)。

  • 头部位于 \(k_0\) 不满足条件而头部位于 \(k_0+1\) 满足条件

在这种情况下,一定有这样的 \(i,j\) 满足 \(k_0+1-L_j\le x_i \le k_0+1+L_j\) 且 \(k_0-L_j >x_i\) 或 \(k_0+L_j < x_i\)。

解不等式得 \(k_0=x_i-L_j-1\)。

至此,我们找出了所有分界点,所以相邻分界点内的点一定相同,即将所有分界点按升序排序后放入 \(S\) 后,当 \(k_0=S_i\) 满足条件时,所有 \(S_{i-1}+1\le k_0 \le S_i\) 的 \(k_0\) 均满足条件。

时间复杂度 \(\mathcal O(N^3 \log n)\)。

const int N = 205;
#define int ll
int n, x[N], l[N], s[N * N << 1], ans;
bool chk(int k)
{
	priority_queue <int> q;
	R(i, 1, n) q.push(abs(x[i] - k));
	R(i, 1, n)
	{
		if (q.top() > l[i]) return false;
		q.pop();
	}
	return true;
}
signed main() 
{
	cin >> n;
	R(i, 1, n) cin >> x[i];
	R(i, 1, n) cin >> l[i];
	sort(l + 1, l + n + 1, greater <int> ());
	int tot = 0;
	R(i, 1, n)
	{
		R(j, 1, n)
		{
			s[++tot] = x[i] - l[j] - 1;
			s[++tot] = x[i] + l[j];
		}
	}
	sort(s + 1, s + tot + 1);
	R(i, 2, tot) 
	{
		if (chk(s[i])) ans += s[i] - s[i - 1];
	}
	cout << ans << endl;
    return 0;
}

标签:ABC318F,le,abc318,满足条件,int,位于,tot,头部,Octopus
From: https://www.cnblogs.com/cyyhcyyh/p/18018311

相关文章

  • [ABC318G] Typical Path Problem 题解
    原题链接:ABC318G显然是圆方树。点双缩点过后建立一颗以点\(c\)为根节点的圆方树,考虑什么情况是合法的。从点\(a\)开始往上跳直到跳到点\(c\),如果中间走过了某一个方点并且这个方点与\(b\)点有直接连边,那么就是合法的;否则不合法。证明:如果路径中所经过的方点和\(b\)点......
  • [ABC318F] Octopus 题解
    前言赛时只做到了E题,赛后才来补的F题,还没做出来,看来还是我太菜了。看了题解过后感觉这道题的思路特别巧妙,于是就来写了这篇题解。题意简述一下题意。有\(n\)个宝藏位置分别在\(a_{i}\),另外有一只章鱼有\(n\)条触手,每条触手的长度为\(b_{i}\)。求有多少个点\(k\)......
  • ABC318E Sandwiches
    ABC318ESandwiches第一次场切E题,感动。虽然比较水注意到\(\{a_n\}\)的值域上限为\(n\),考虑值域相关算法,对每一个\(a_i\)开一个std::vector,记作\(pos_{a_i}\),存储\(a_i\)所有的出现位置。枚举\(x\in[1,n]\),遍历\(pos_x\),当遍历到第\(i\)个时,枚举\(j\in......
  • 【题解】[ABC318F] Octopus(思维)
    【题解】[ABC318F]Octopus题目链接F-Octopus题意概述有个机器人,它有\(n\)个手臂,第\(i\)个手臂长度为\(l_i\)。同时有\(n\)个宝藏,第\(i\)个宝藏的坐标是\(x_i\)。当机器人位于\(k\)时,它的第\(i\)条手臂可以够到\([k-l_i,k+l_i]\)范围内的宝藏。机器人的每......
  • 【题解】ABC318
    AtCoder-ABC318AFullMoon暴力枚举判断。提交记录:Submission-AtCoderAtCoder-ABC318BOverlappingSheets暴力枚举判断。提交记录:Submission-AtCoderAtCoder-ABC318CBlueSpring使用通票一定是用在最大的\(kd\)天,排序后枚举\(k\)即可。提交记录:Submission-AtC......
  • [ABC318G] Typical Path Problem 题解
    题意给定一个\(N\)个节点和\(M\)条边组成的简单无向联通图,给定三个节点\(A,B,C\),求是否存在一条简单路径满足\(A\rightarrowB\rightarrowC\)。(\(3\leN,M\le2\times10^5\))。题解因为简单路径要求每个节点至多经过一次,故不存在合法的简单路径当且仅当存在一个......
  • ABC318_E
    #include<bits/stdc++.h>usingnamespacestd;#defineintlonglong#defineendl'\n'intn,a[300010],c[300010],t[300010],s;signedmain(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin>>n;for(intx,i=1;i<=n;i++){......
  • abc318
    A-FullMoonhttps://atcoder.jp/contests/abc318/tasks/abc318_aProblemStatementTakahashilikesfullmoons.Lettodaybeday1.ThefirstdayonoraftertodayonwhichhecanseeafullmoonisdayM.Afterthat,hecanseeafullmooneveryPdays,......
  • [ABC318D] General Weighted Max Matching 题解
    [ABC318D]GeneralWeightedMaxMatching题解题意  给定无向有权完全图,求最大权匹配。思路分析  注意到\(n\le16\),我考虑状压DP。  设当前点集\(S\)中最大权匹配的答案是\(f_S\),我们考虑\(S\)中“最后”一个点\(p\)(这里的“最后”一个点是指,在状压表示状态......
  • [ABC318E] Sandwiches 题解
    题意给定一个长度为\(N\)的正整数列\(A=\left(A_1,A_2,\cdots,A_N\right)\),求满足以下条件的正整数三元组\(\left(i,j,k\right)\)的数量:\(1\lei<j<k\leN\);\(A_i=A_k\);\(A_i\neqA_j\)。数据范围:\(3\leN\le3\times10^5\);\(1\leA_i......