首页 > 其他分享 >Atcoder ABC259H Yet Another Path Counting

Atcoder ABC259H Yet Another Path Counting

时间:2023-07-27 20:12:49浏览次数:35  
标签:Atcoder frac int 复杂度 Another Path Counting ll

首先可以想到有组合数的方法:
令起点为 \((x1, y1)\),终点为 \((x2, y2)\),则路径方案数就为 \(\binom{x2 + y2 - x1 - y1}{x2 - x1}\),这样设有 \(k\) 个相同颜色的点,时间复杂度就为 \(O(k^2)\)。

再考虑到还有 \(\text{DP}\) 方法:
令 \(f_{x, y}\) 为走到 \((x, y)\) 的方案数,不限制起点。
对于颜色都为 \(c\) 的点 \((x, y)\) 每个都可能成为起点,令 \(f_{x, y} = 1\),转移式就为 \(f_{x, y}\leftarrow f_{x, y} + f_{x - 1, y} + f_{x, y - 1}\),最后再统计每个点为终点的方案数 \(\sum\limits_{col_{x, y} = c} f_{x, y}\)。
时间复杂度就为 \(O(n^2)\)。

发现第一种方法在点数少时更优秀,第二种方法在点数多时更优秀,考虑设定一个阙值 \(B\),在点数 \(\le B\) 时用第一种,\(> B\) 时用第二种。
对于第一种方法,上界肯定要尽量都是 \(B\),时间复杂度 \(O(\frac{n^2}{B}\times B^2)\),即 \(O(n^2B)\);对于第二种方法,最多会出现 \(\frac{n^2}{B}\) 次这种情况,所以时间复杂度为 \(O(\frac{n^4}{B})\)。
于是总时间复杂度为 \(O(n^2B + \frac{n^4}{B})\),当 \(B = n\) 时最优,时间复杂度为 \(O(n^3)\)。

// lhzawa(https://www.cnblogs.com/lhzawa/)
// Problem: Ex - Yet Another Path Counting
// Contest: AtCoder - AtCoder Beginner Contest 259
// URL: https://atcoder.jp/contests/abc259/tasks/abc259_h
// Memory Limit: 1024 MB
// Time Limit: 2000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include<bits/stdc++.h>
using ll = long long;
const int N = 4e2 + 10;
ll C[2 * N][2 * N], f[N][N];
std::vector<std::pair<int, int> > u[N * N];
const ll mod = 998244353;
int main() {
	int n;
	scanf("%d", &n);
	for (int i = 1; i <= n; i++) {
		for (int j = 1, x; j <= n; j++) {
			scanf("%d", &x);
			u[x].emplace_back(i, j);		
		}
	}
	C[0][0] = 1;
	for (int i = 1; i <= 2 * n; i++) {
		C[i][0] = C[i][i] = 1;
		for (int j = 1; j < i; j++) {
			C[i][j] = (C[i - 1][j - 1] + C[i - 1][j]) % mod;
		}
	}
	ll ans = 0;
	for (int c = 1; c <= n * n; c++) {
		if ((int)u[c].size() <= n) {
			for (auto [x1, y1] : u[c]) {
				for (auto [x2, y2] : u[c]) {
					if (x1 <= x2 && y1 <= y2) {
						ans = (ans + C[x2 + y2 - x1 - y1][x2 - x1]) % mod;
					}
				}
			}
		} else {
			for (int i = 1; i <= n; i++) {
				for (int j = 1; j <= n; j++) {
					f[i][j] = 0;
				}
			}
			for (auto [x, y] : u[c]) {
				f[x][y] = 1;
			}
			for (int i = 1; i <= n; i++) {
				for (int j = 1; j <= n; j++) {
					f[i][j] = (f[i][j] + f[i - 1][j] + f[i][j - 1]) % mod;
				}
			}
			for (auto [x, y] : u[c]) {
				ans = (ans + f[x][y]) % mod;
			}
		}
	}
	printf("%lld\n", ans);
	return 0;
}

标签:Atcoder,frac,int,复杂度,Another,Path,Counting,ll
From: https://www.cnblogs.com/lhzawa/p/17585892.html

相关文章

  • Azure Virtual Network (21) ER专线启用Fast Path
    《WindowsAzurePlatform系列文章目录》 在AzureER专线启动FastPath,具体的区别如下:禁用FastPath启用FastPathAzureVM访问本地VM流量,流量不经过ER网关AzureVM访问本地VM流量,流量不经过ER网关本地VM流量访问AzureVM流量,流量经过ER网关本地VM流量访......
  • CF938G Shortest Path Queries 题解
    目录题目链接题目分析为什么使用生成树建树对于异或贡献的分析code题目链接CF938G洛谷挂了只能交CF题目分析本题有以下几个关键点:为什么使用生成树建树首先根据\(WC2011\)我们发现可以使用\(dfs\)序来保存节点之间的关系但是我们发现本题目中存在加边删边操作不......
  • k8s数据卷 Volume 之 hostPath 与 emptyDir
    一、为什么需要volume(数据卷)?容器中的文件在磁盘上是临时存放的,这给容器中运行比较重要的应用程序带来一些问题。问题1:当容器升级或者崩溃时,kubelet会重建容器,容器内文件会丢失问题2:一个Pod中运行多个容器需要共享文件。Kubernetes卷(Volume)这一抽象概念能够解决这两个问题......
  • Atcoder ARC060D Digit Sum
    看到\(n\le10^{11}\),考虑按根号分为两部分处理。对于\(b\le\sqrt{n}\),考虑直接暴力算\(\operatorname{f}(b,n)\)判断是否等于\(s\),这部分的计算量是\(O(\sqrt{n})\)级别的。对于\(\sqrt{n}<b\len\),则这个时候在\(b\)进制下\(n\)也只有两位,考虑列出\(n,s\)......
  • classpath的jar包中读取文件
    在idea中读取resources下的文件没有问题(调用getFile),但是打成jar包就会出问题;使用spring的ClassPathResource或者hutool的ClassPathResource去解析文件都会有问题;但是使用上面两个工具去读取inputstream或者byte就没问题,因为内部都是调用ClassLoader的getResource方法,如果是文件......
  • @Value("${dbpc.path}")和@Value("#{dbpc.path}")区别
    这两个注解都可以用来将值注入到JavaBean的字段中。但是,它们的使用方式略有不同。@Value("${dbpc.path}")是Spring框架中的注解之一,用于从Spring配置文件中获取属性值,并将其注入到JavaBean的字段中。该注解可以用于注入基本类型、字符串、数组、集合、对象等类型的值。@Value(......
  • xpath丶BeautifulSoup丶pyquery丶jsonpath 解析html与json串
    XPath与jsonpath1importjson2fromlxmlimportetree3fromjsonpathimportjsonpath45defjson_test():6str1='{"name":"埃里克森"}'7#将字符串转为Pythondict对象8js_obj=json.loads(str1)9print(typ......
  • UE5 FPaths 路径 使用记录
    相关路径节点获取配置文件路径FStringUBlueprintPathsLibrary::EngineConfigDir(){ returnFPaths::EngineConfigDir();}注意ProjectContentDir函数编辑模式下返回全路径,运行模式下返回相对路径GetProjectContentDirectory函数返回全路径......
  • GDI+区域(Region)排除与路径(GraphicsPath)叠加透明
    1、区域(Region)排除 1CRectrt;2GetClientRect(&rt);34GraphicsPathpa;5pa.AddEllipse(0,0,rt.Width(),rt.Height());6Regionrg(Rect(0,0,rt.Width(),rt.Height()));7rg.Exclude(&pa);8graphics.FillRegion(&SolidBrush(Color(255,0,......
  • unable to prepare context: unable to evaluate symlinks in Dockerfile path: l
    Dockerfile路径中的符号链接无法解析的问题在使用Docker构建镜像时,有时会遇到错误消息“unabletopreparecontext:unabletoevaluatesymlinksinDockerfilepath:l”。这个错误通常是由于Dockerfile文件路径中包含了无法解析的符号链接所引起的。本文将介绍这个问题的原因......