首页 > 其他分享 >CodeForces 575F Bulbo

CodeForces 575F Bulbo

时间:2023-12-10 22:35:37浏览次数:34  
标签:typedef 575F ll CodeForces long maxn lsh Bulbo define

洛谷传送门

CF 传送门

提供一个傻逼 \(O(n^2)\) 做法。

首先考虑暴力 dp,设第 \(i\) 轮后在 \(j\) 坐标上的最小花费为 \(f_{i, j}\),有:

\[f_{i, j} = \min f_{i, k} + |j - k| + \begin{cases} l_i - j & j < l_i \\ 0 & l_i \le j \le r_i \\ j - r_i & j > r_i \end{cases} \]

然后你直观感受一下,除了初始位置,到一个区间的端点肯定不劣。离散化一下,拆绝对值后前后缀 \(\min\) 优化,就是 \(O(n^2)\) 了。

code
// Problem: F. Bulbo
// Contest: Codeforces - Bubble Cup 8 - Finals [Online Mirror]
// URL: https://codeforces.com/problemset/problem/575/F
// Memory Limit: 256 MB
// Time Limit: 1000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include <bits/stdc++.h>
#define pb emplace_back
#define fst first
#define scd second
#define mkp make_pair
#define mems(a, x) memset((a), (x), sizeof(a))

using namespace std;
typedef long long ll;
typedef double db;
typedef unsigned long long ull;
typedef long double ldb;
typedef pair<ll, ll> pii;

const int maxn = 10050;

ll n, m, a[maxn], b[maxn], lsh[maxn], tot, f[2][maxn], g[maxn], h[maxn];

void solve() {
	scanf("%lld%lld", &n, &m);
	lsh[++tot] = m;
	for (int i = 1; i <= n; ++i) {
		scanf("%lld%lld", &a[i], &b[i]);
		lsh[++tot] = a[i];
		lsh[++tot] = b[i];
	}
	sort(lsh + 1, lsh + tot + 1);
	tot = unique(lsh + 1, lsh + tot + 1) - lsh - 1;
	m = lower_bound(lsh + 1, lsh + tot + 1, m) - lsh;
	for (int i = 1; i <= n; ++i) {
		a[i] = lower_bound(lsh + 1, lsh + tot + 1, a[i]) - lsh;
		b[i] = lower_bound(lsh + 1, lsh + tot + 1, b[i]) - lsh;
	}
	mems(f, 0x3f);
	f[0][m] = 0;
	for (int i = 1, o = 1; i <= n; ++i, o ^= 1) {
		mems(f[o], 0x3f);
		g[0] = h[tot + 1] = 1e18;
		for (int j = 1; j <= tot; ++j) {
			g[j] = min(g[j - 1], f[o ^ 1][j] - lsh[j]);
		}
		for (int j = tot; j; --j) {
			h[j] = min(h[j + 1], f[o ^ 1][j] + lsh[j]);
		}
		for (int j = 1; j <= tot; ++j) {
			f[o][j] = min(g[j] + lsh[j], h[j] - lsh[j]) + (j < a[i] ? lsh[a[i]] - lsh[j] : (j > b[i] ? lsh[j] - lsh[b[i]] : 0));
		}
	}
	ll ans = 1e18;
	for (int i = 1; i <= tot; ++i) {
		ans = min(ans, f[n & 1][i]);
	}
	printf("%lld\n", ans);
}

int main() {
	int T = 1;
	// scanf("%d", &T);
	while (T--) {
		solve();
	}
	return 0;
}

标签:typedef,575F,ll,CodeForces,long,maxn,lsh,Bulbo,define
From: https://www.cnblogs.com/zltzlt-blog/p/17893369.html

相关文章

  • Codeforces Round 914 (Div. 2)
    CodeforcesRound914(Div.2)A.Forked!#include<bits/stdc++.h>#defineendl'\n'#defineintlonglongusingnamespacestd;voidsolve(){inta,b;intx,y;cin>>a>>b>>x>>y;map<pair<int,in......
  • [Codeforces] CF1793C Dora and Search
    CF1793CDoraandSearch题意给定一个长度为\(n\)的排列\(a\),问是否存在正整数\(l,r\)使得\(a_l,a_r\)均不为\(a_{l...r}\)中的最大值或最小值。思路很明显的双指针,虽然我最开始的思路是二分预处理当前序列的最大值和最小值,并且一旦两段的\(l,r\)中有一个是最大或......
  • [Codeforces] CF1790D Matryoshkas
    CF1790DMatryoshkas题意ZYH的玩具有很多种类,每种玩具都是一段连续的区间(如\([3,4,5]\))ZYH有很多种玩具,但是他不慎把所有玩具的元素乱序混合到了一起。例如玩具\([1,2,3,4]\)和玩具\([2,3]\)混合到一起后可能是\([2,2,3,4,3,1]\)。给定混合后的序列\(a\),SA想知道Z......
  • Codeforces Round 803 (Div. 2)
    基本情况A题秒了。B题经典+2。(经典不开longlong)C题读错题,没得思路。B.RisingSandProblem-B-Codeforces思路好想,分类讨论找规律就行。这里还是要强调一下认真分析数据:InputThesecondlineofeachtestcasecontains\(n\)integers\(a_1,a_2,\ldots,a_n\)......
  • Codeforces Round 914 (Div. 2)
    基本情况脑子最卡的一集。A题读假题,卡了快一小时。B题代码太复杂,出错不好修改,一直调。虽然最后都出来了,但是没有剩下任何时间看后面题目了。A.Forked!Problem-A-Codeforces一开始不知道犯得什么病,觉得可以斜着走一格算作一步,然后情况就太多了,非常不好处理。后面突......
  • Codeforces Round 914 (Div. 2)
    C.ArrayGame题意:给定一个n的数组以及k的操作数,每次可以选择下表为i,j(i<j)得到一个abs(a[i]-a[j])的数放在数组末尾,问你k次操作后,数组中最小的数是多少?思路:首先k>=3选相同的下表两次,一定结果是0,是最小。k==1遍历出下表两两相减的绝对值最小以及本身数组中最小的即可k==2要将数......
  • CodeForces 1902F Trees and XOR Queries Again
    洛谷传送门CF传送门如果我们能把\(x\toy\)路径上的所有点权插入到线性基,那么可以\(O(\logV)\)查询。但是因为线性基合并只能\(O(\log^2V)\)(把一个线性基的所有元素插入到另一个),所以只能倍增做\(O((n+q)\logn\log^2V)\),过不了。考虑\(O(n\logV)\)预处理出......
  • Codeforces Round 904 (Div. 2)
    [CodeforcesRound904(Div.2)](https://codeforces.com/contest/1894)A.SimpleDesign暴力就行了1e9跑不满的#include<bits/stdc++.h>#defineintlonglong#defineendl'\n'usingnamespacestd;voidsolve(){intx,k;cin>>x>>......
  • Codeforces Round 801 (Div. 2)
    基本情况A就开始犯病,导致+2.B、C都过样例了,但是都错。B.CircleGame赛时推出来奇数必输,也知道偶数不是必赢,但是思路不清楚。这里我没意识到一个很关键的性质。奇数堆拿的石堆会变,这也导致了必输,比如三个堆\(1,2,3\)。表粗的为JOE。123123显然JOE拿的石堆是变化的......
  • [Codeforces] CF1763B Incinerate
    CF1763BIncinerate题意为了消灭人类,怪物协会向地球表面派出了\(n\)只怪兽。第\(i\)只怪物有一个生命值\(h_i\)和一个攻击力\(p_i\).凭借他最后的一击,真螺旋焚烧炮,Genos可以对所有活着的怪物造成\(k\)点伤害。换句话说,Genos可以通过一次攻击降低所有怪物\(k\)点......