首页 > 其他分享 >Codeforces Round 865 (Div. 2) B. Grid Reconstruction

Codeforces Round 865 (Div. 2) B. Grid Reconstruction

时间:2023-10-20 17:33:43浏览次数:30  
标签:路径 865 Codeforces 贡献 偶数 cdots cost Grid 2n

给一个 \(2 \times n\) 的网格,且 \(n\) 是偶数。你需要将 \(1 \sim 2 \times n\) 填入这个网格。

一条路径是从 \((1, 1)\) 开始,每次只能向右或向下,到 \((2, n)\) 结束时,所经过的位置。按经过点的顺序标号,一两条路径的代价是 \(cost = a_1 - a_2 + a_3 - a_4 + \cdots = \sum_{i=1}^{k} (-1)^{i + 1} a_i\) 。

你需要构造一个网络,使得所有路径的最小代价最大。

几个观察:

  • 一条路径由第一行的一段前缀和第二行的一段后缀构成,\(x \in [1, n]\) , \(path = pre_x + suf_x\) 。
  • 对于一条路径,奇数位置上的数是正贡献,偶数位置上的数是负贡献。扩展到网格上则有,\(i + j\) 为偶数的数的贡献为正,\(i + j\) 为奇数的数的贡献为负
    • 于是 \(i + j\) 为偶数的位置上填 \(n + 1 \sim 2n\) ,\(i + j\) 为奇数的位置上填 \(1 \sim n\) 。
  • 由于 \(n\) 为偶数 \((1, 1)\) 和 \((2, n)\) 一定有正贡献。
  • 路径的最小代价最大——即每条路径代价尽可能相等。

由于所有路径的贡献需要尽可能相等,不妨观察所有相邻路径的变化情况。

  • \(x = 1 \rightarrow x = 2\) ,\(cost = cost + a_{2, 1} - a_{1, 2}\) 。
  • \(x = 2 \rightarrow x = 3\) ,\(cost = cost - a_{2, 2} + a_{1, 3}\) 。
  • \(x = 3 \rightarrow x = 4\) ,\(cost = cost + a_{2, 3} - a_{1, 4}\) 。
  • \(\cdots\)

于是让每条路径变化的差值为 \(1, -1, 1, -1, \cdots\) 交替即可使所有路径尽可能相等。

于是一种构造方式为

  • \(a_{2, 1}, a_{1, 2}, a_{2, 3}, a_{1, 4}, \cdots a_{2, n-1}, a_{1, n} = 1, 2, 3, 4, \cdots, n-1, n\) 。
  • 一定在路径中的 \((1, 1), (2, n) = 2n, 2n - 1\) 。
  • \(a_{2, 2}, a_{1,3}, \cdots, a_{2, n - 2}, a_{1, n} = n+1, n+2, \cdots, 2n-3,2n-2\) 。
view
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
int g[2][100005];
void solve(){
	int n; std::cin >> n;
	g[0][1] = 2 * n; g[1][n] = 2 * n - 1;
	for (int i = 1, p = 1, cur = 1; i <= n; i++, p ^= 1, cur++) {
		g[p][i] = cur;
	}
	for (int i = 2, p = 1, cur = n + 1; i < n; i++, p ^= 1, cur++) {
		g[p][i] = cur;
	}
	for (int i = 1; i <= n; i++) std::cout << g[0][i] << " \n"[i==n];
	for (int i = 1; i <= n; i++) std::cout << g[1][i] << " \n"[i==n];
}               
int main() { 
	int _ = 1; std::cin >> _;
	while (_--) solve();
	return 0;
}

标签:路径,865,Codeforces,贡献,偶数,cdots,cost,Grid,2n
From: https://www.cnblogs.com/zsxuan/p/17776199.html

相关文章

  • Codeforces Round 902 (Div. 2, based on COMPFEST 15 - Final Round)
    \(D.EffectsofAntiPimples\)对每个数字能到达的所有位置先预处理最大值,那么就代表选择这个数字之后真实的贡献,那么对这样的预处理值,最小值显然只有一种做法,为\(2^0\),第二小的值应该可以与最小值一起选择,所以答案为\(2^1\),以此类推之后,每个值乘上对应的2的幂次之后求和即......
  • DevExpress WPF Pivot Grid组件,可轻松实现多维数据分析!(二)
    在上文中(点击这里回顾>>)我们主要为大家介绍了DevExpressWPF PivotGrid组件的超快速枢轴分析功能、Microsoft分析服务等,本文将继续介绍图表透视数据的处理、MVVM支持等。欢迎持续关注我们,探索更多新功能哦~P.S:DevExpressWPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需......
  • flutter组件之GridView.builder()
    如果您的Flutter应用程序需要显示大量或无限数量项目的网格视图(例如,从API获取的产品列表),那么您应该使用GridView.builder()而不是GridView()。该**生成器()**只为那些确实可见,所以您的应用程序的性能将得到改善例子步骤:生成一个包含100.000个虚拟产品的列表:finalList<Map>myP......
  • Codeforces Round 872 (Div. 2) B. LuoTianyi and the Table
    给一个\(n\timesm\)的矩阵和\(n\timesm\)个数,你需要把这些数填入矩阵。保证\[\sum_{i=1}^n\sum_{j=1}^m\left(\mathop{max}\limits_{1\leqx\leqi,1\leqy\leqj}a_{x,y}-\mathop{min}\limits_{1\leqx\leqi,1\leqy\leqj}a_{x,y}\right)......
  • Educational Codeforces Round 149 (Rated for Div. 2) C. Best Binary String
    给一个字符串\(s\)包含\(0,1,?\)。定义一个\(01\)串\(s\)的\(cost\)为:选择\(s\)的任意一个子段\([l,r]\)并\(reverse\)。将\(s\)变为一个非降序序列时的\(reverse\)最小次数即\(cost\)。你可以让\(s\)的\(?\)换成\(0/1\),使新\(s\)的\(cost\)......
  • 循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(10) -- 在Dat
    有时候,一些数据的录入可能需要使用表格直接录入会显得更加方便快捷,这种情况有时候也是由于客户使用习惯而提出,本篇随笔介绍在WPF应用端上使用DataGrid来直接新增、编辑、保存数据的处理。录入数据的时候,我们都采用在一个窗体界面中,根据不同内容进行录入,但是有时候涉及主从表的数......
  • Educational Codeforces Round 150 (Rated for Div. 2) B. Keep it Beautiful
    数组\(a=[a_1,a_2,\cdots,a_n]\)被称为是美丽的,如果可以将\([1,x]\)段移到\([x+1,n]\)段后面,\(x\geq0\),数组可以构成非降序。现在有一个数组\(a\)(一开始为空)和\(q\)个询问,第\(i\)个询问给一个正整数\(x_i\)。需要逐步执行以下操作。若\(x_i\)拼接......
  • Codeforces Round 884 (Div. 1 + Div. 2) B. Permutations & Primes
    给一个正整数\(n\),你需要构造一个\(n\)的排列\(p_1,p_2,\cdots,p_n\)。对于排列\(p\)的每个子段\([l,r]\),\(mex_{i=l}^{r}a_i\)的结果为质数的次数尽可能多。此处的\(mex\)最小排除值最低为\(1\)而非\(0\)。不难想到,小质数\(2,3\)容易构造。于是有......
  • Codeforces Round 882 (Div. 2) B. Hamon Odyssey
    给一个长为\(n\)的数组\(a_1,a_2,\cdots,a_n\)。定义\(f(l,r)=\&_{i=l}^{r}a_i\)。你需要对\(a\)进行分段,使得各段的\(f(l,r)\)之和最小。在各段\(f(l,r)\)之和最小的情况下,尽可能分出更多的段。输出满足上述条件下,\(a\)可分的段数。......
  • DataGridView导出EXCEL
    publicclassexecl{///<summary>///导出EXECLDataGridViewX///</summary>///<paramname="dataGridView">DataGridViewX</param>///<paramname="IsVisible">是否导出隐......