首页 > 其他分享 >Codeforces Round 863 (Div. 3) B. Conveyor Belts

Codeforces Round 863 (Div. 3) B. Conveyor Belts

时间:2023-10-20 17:58:43浏览次数:33  
标签:frac Conveyor 863 min Codeforces long Belts

给一个 \(n \times n\) 的矩阵, \(n\) 是偶数。将矩阵按圈分割,同一圈的位置可以不消耗代价移动,可以消耗一个代价移动到相邻圈。

给出 \(n, x_1, y_1, x_2, y_2\) ,询问 \((x_1, y_1)\) 移动到 \((x_2, y_2)\) 的代价最小是多少。

显然对每个圈可以选择左上角作为定点。

  • 显然直线 \(f(i) = n - j\) 左侧的点 \((a, b)\) 可以直接定位到定点 \(min(a, b)\) 。这些点满足 \(a + b \leq 1 + n\) 。
  • 直线 \(f(i) = n - j\) 右侧的点 \((a, b)\) 经过 \((\frac{n}{2},\frac{n}{2})\) 中心对称后还在同一圈,且可以移到左侧。

假设 \((x_1', y_1'), (x_2', y_2')\) 都是调整过的点,则答案为 \(|min(x_1', y_1') - min(x_1', y_1')|\) 。

view
#include <bits/stdc++.h>
typedef long long ll;
void solve(){
	int n, x_1, y_1, x_2, y_2; std::cin >> n >> x_1 >> y_1 >> x_2 >> y_2;
	if (x_1 + y_1 > n + 1) x_1 = n + 1 - x_1, y_1 = n + 1 - y_1;
	if (x_2 + y_2 > n + 1) x_2 = n + 1 - x_2, y_2 = n + 1 - y_2;
	std::cout << abs(std::min(x_1, y_1) - std::min(x_2, y_2)) << '\n';
}               
int main() { 
	int _ = 1; std::cin >> _;
	while (_--) solve();
	return 0;
}

标签:frac,Conveyor,863,min,Codeforces,long,Belts
From: https://www.cnblogs.com/zsxuan/p/17777655.html

相关文章

  • CF863C 1-2-3
    原题链接题目给出了不同状态之间的转化关系,想到可以构成一张有向图,在\((a,b)\)和\((A_{a,b},B_{a,b})\)之间连边。但是\(k\)的数量级十分巨大,直接跑\(k\)个点计算答案肯定是不行的。事实上状态数最多只有\(9\)种,也就是最多只有\(9\)个点,图上一定存在一个环。我......
  • Conveyor (CF E) (dp 差分/前缀 条件迷惑t)
     思路: 找各种性质1每一秒只有史莱姆进入起始点,然后他会选一个方向走(右或者下),每一秒史莱姆都会这样走在考虑前t秒内有S个史莱姆到达这个点,然后就会有s+1/2个往右走,s/2往下走而且问t秒只会有t-n-m-1秒后的时刻影响(诈骗t)于是利用dp+差......
  • P9432 [NAPC-#1] rStage5 - Hard Conveyors
    P9432[NAPC-#1]rStage5-HardConveyors感谢此题让我知道了Dijkstra的一种新用法。题意:给定一棵\(n\)个节点的无根树以及树上的\(k\)个关键节点,给定边的长度。有\(q\)次询问,每次给出\(s,t\),问从\(s\)到\(t\)且经过至少一个关键节点的路径的最短长度。分析:显......
  • CF1863 题解
    CF1863题解A条件很简单:如果总共的'+'号加上开始上线人数不到\(n\)人,就不可能。实时记录人数,如果某一时刻大于等于\(n\)人在线上,就一定是。剩余情况则可能。#include<bits/stdc++.h>usingnamespacestd;intmain(){ intn,a,q,T; cin>>T; while(T--) { cin>>n>......
  • CodeForces 1863G Swaps
    洛谷传送门CF传送门看到\(a_{a_i}\)和\(a_i\in[1,n]\),果断连边\(i\toa_i\),得到内向基环森林。那么每次相当于把\(a_i\)变成自环,连边\(i\toa_{a_i}\)。但是每次操作都改变图的形态很不好办,考虑打标记。每次\(\operatorname{swap}(a_i,a_{a_i})\),我们就把\(i......
  • CF1863G
    简洁的题面,深邃的思想。首先,一个经典的套路是:对于序列中涉及到对于\(a_{a_i}\)和\(a_i\)进行操作的问题,一般可以考虑建立\((i,a_i)\)的内向基环树或者\((a_i,i)\)的外向基环树转化为图论问题。我们建立\((i,a_i)\)的内向基环树,\(swap(a_i,a_{a_i})\impliesa'_i=a_......
  • CF 1863 B
    B.SplitSort一开始想麻烦了,搞的没思路。这道题只需要遍历一遍数组并查询当前查询的数小\(1\)的数是否查询过,如果没有查询过就代表该数在这个数的后面,\(Ans\)就需要加一,最后输出就行。代码#include<bits/stdc++.h>#defineendl'\n'usingnamespacestd;typedeflonglon......
  • CF 1863 C
    C.MEXRepetition通过观察样例,直接猜结论可知,例如第二个样例\([0,1,3]\)后面其实有一个隐藏数字(2),所以完整的排列为\([0,1,3,2]\)。然后每一次操作都是把最后的一位数字移到整个排列的最前面,并把最后一位隐藏,所以直接取模就能求出最后的排列。代码#include<bits/stdc++.h......
  • CF1863C 题解
    CF1863CMEXRepetition题解Links洛谷CodeforcesDescription给你一个长度为\(n\)的序列\(a\),满足\(\foralli\in[1,n]\),\(0\leqa_{i}\leqn\)且序列中的数互不相同。定义一次操作为:按照\(i\)从\(1\)到\(n\)的顺序,\(a_{i}\gets\operatorname{MEX}(a_{1}......
  • CF1863B 题解
    CF1863BSplitSort题解Links洛谷CodeforcesDescription给定一个\(1\simn\)的排列\(q\),你可以多次进行以下操作:新建一个初始为空的序列\(q\);选择一个整数\(x\)(\(2\leqx\leqn\));按照在\(p\)中出现的顺序将所有小于\(x\)的数添加到序列\(q\)末尾。按照在......