首页 > 其他分享 >VP AtCoder Beginner Contest 387

VP AtCoder Beginner Contest 387

时间:2025-01-09 22:11:47浏览次数:1  
标签:std AtCoder return int auto self VP vector 387

A - Happy New Year 2025

按题意输出即可。

点击查看代码
void solve() {
    int a, b;
    std::cin >> a >> b;
    std::cout << (a + b) * (a + b) << "\n";
}

B - 9x9 Sum
直接遍历累加满足不等于x的数即可,注意这个九九乘法表是9*9的矩阵,不是我们学的下三角。

点击查看代码
void solve() {
    int x;
    std::cin >> x;
    int ans = 0;
    for (int i = 1; i <= 9; ++ i) {
    	for (int j = 1; j <= 9; ++ j) {
    		if (i * j != x) {
    			ans += i * j;
    		}
    	}
    }

    std::cout << ans << "\n";
}

C - Snake Numbers

题意:求[l, r]之间满足最高位严格大于其他位的数。

没想到c就上了数位dp。。。
但还是挺基础的,f[i][j]表示填到第i位且最大值为j的数字数量,最开始我们让最大值为10,一直等到填到一个不为0的数更新最大值,其他都是数位dp的基操。

点击查看代码
void solve() {
    i64 l, r;
    std::cin >> l >> r;

    std::vector<int> a;

    std::vector f(20, std::vector<i64>(11, -1));
    auto dp = [&](auto self, int u, int max, bool limit) -> i64 {
    	if (u < 0) {
    		return 1;
    	}

    	if (u == 0 && max == 10) {
    		return 0;
    	}

    	if (f[u][max] != -1 && !limit) {
    		return f[u][max];
    	}

    	int up = limit ? a[u] : 9;
    	up = std::min(max - 1, up);
    	i64 ans = 0;
    	for (int i = 0; i <= up; ++ i) {
    		int nmax = max;
    		if (max == 10 && i != 0) {
    			nmax = i;
    		}

    		ans += self(self, u - 1, nmax, limit && i == a[u]);
    	}

    	if (!limit) {
    		f[u][max] = ans;
    	}

    	return ans;
    };

    auto work = [&](i64 x) -> i64 {
    	if (x < 10) {
    		return 0;
    	}

    	a.clear();
    	while (x) {
    		a.push_back(x % 10);
    		x /= 10;
    	}

    	return dp(dp, a.size() - 1, 10, true);
    };

    std::cout << work(r) - work(l - 1) << "\n";
}

D - Snaky Walk

(这题不是比c简单很多?)

题意:给你一个矩阵,有起点终点,不能走障碍物,并且要上下和左右交替走,也就是每次都要拐正好90度的弯,求最短距离。

比较简单的bfs,加一维记上次走的方向就可以了。

点击查看代码
void solve() {
    int n, m;
    std::cin >> n >> m;
    std::vector<std::string> s(n);
    for (int i = 0; i < n; ++ i) {
    	std::cin >> s[i];
    }

    std::pair<int, int> S, G;
    for (int i = 0; i < n; ++ i) {
    	for (int j = 0; j < m; ++ j) {
    		if (s[i][j] == 'S') {
    			S = {i, j};
    		} else if (s[i][j] == 'G') {
    			G = {i, j};
    		}
    	}
    }

    const int dx[] = {-1, 0, 1, 0}, dy[] = {0, 1, 0, -1};
    std::queue<std::array<int, 3> > q;
    const int inf = 1e9;
    std::vector dist(n, std::vector(m, std::array<int, 4>{inf, inf, inf, inf}));
    for (int i = 0; i < 4; ++ i) {
    	q.push({S.first, S.second, i});
    	dist[S.first][S.second][i] = 0;
    }

    while (q.size()) {
    	auto [x, y, d] = q.front(); q.pop();
    	for (int i = 0; i < 4; ++ i) {
    		if (i + d & 1) {
    			int nx = x + dx[i], ny = y + dy[i];
    			if (nx < 0 || nx >= n || ny < 0 || ny >= m || s[nx][ny] == '#') {
    				continue;
    			}

    			if (dist[nx][ny][i] <= dist[x][y][d] + 1) {
    				continue;
    			}

    			dist[nx][ny][i] = dist[x][y][d] + 1;
    			q.push({nx, ny, i});
    		}
    	}
    }

    int ans = inf;
    for (int i = 0; i < 4; ++ i) {
    	ans = std::min(ans, dist[G.first][G.second][i]);
    }

    if (ans == inf) {
    	ans = -1;
    }

    std::cout << ans << "\n";
}

E - Digit Sum Divisible 2

不会这种
待补

F - Count Arrays

有n个数,第i个数要小于等于第ai个数,每个数的值域为[1, m],求可以构造的数组方案数。

我们把ai向i连边,最后会是一个森林,可能会有一颗基环树,对每颗树求出来方案数然后相乘即可。对于基环树进行缩环后当一般树处理,因为环上的元素值肯定一样。
那么怎么求一颗树的方案数呢?直接树形dp。f[i][j]为i值为j时的方案树,g[i][j]为i取值1~j的方案数,那么f[u][i] = g[v][i], v是u的儿子。

点击查看代码
void solve() {
    int n, m;
    std::cin >> n >> m;


    std::vector<std::vector<int> > adj(n);
    std::vector<int> in(n);

    for (int i = 0; i < n; ++ i) {
    	int x;
    	std::cin >> x;
    	-- x;
    	if (x != i) {
    		adj[x].push_back(i);
    		++ in[i];
    	}
    }

    std::vector<int> st(n), st1(n), in_cycle(n);
    std::vector<int> a;

    int U, V;

    auto get_cycle = [&](auto self, int u) -> bool {
    	if (u == V) {
    		a.push_back(u);
    		return in_cycle[u] = 1;
    	}

    	for (auto & v : adj[u]) {
    		if (self(self, v)) {
    			a.push_back(u);
    			return in_cycle[u] = 1;
    		}
    	}

    	return false;
    };

    auto cycle = [&](auto self, int u) -> bool {
    	st[u] = 1;
    	for (auto & v : adj[u]) {
    		if (st[v]) {
    			U = v, V = u;
    			return true;
    		}

    		if (self(self, v)) {
    			return true;
    		}
    	}

    	st[u] = 0;
    	return false;
    };

    std::vector f(n, std::vector<Z>(m + 1, 1)), g(n, std::vector<Z>(m + 1));
    auto dfs = [&](auto self, int u) -> void {
    	st[u] = 1;
    	for (auto & v : adj[u]) {
    		if (in_cycle[v]) {
    			continue;
    		}

    		self(self, v);
    		for (int i = 1; i <= m; ++ i) {
    			f[u][i] *= g[v][i];
    		}
    	}

    	for (int i = 1; i <= m; ++ i) {
    		g[u][i] = g[u][i - 1] + f[u][i];
    	}
    };

    Z ans = 1;
    for (int i = 0; i < n; ++ i) {
    	if (in[i] == 0) {
    		dfs(dfs, i);
    		ans *= g[i][m];
    	} else if (!in_cycle[i] && !st[i] && cycle(cycle, i)) {
    		a.clear();
    		// std::cout << i + 1 << "--" << U + 1 << "-" << V + 1 << ": ";
    		get_cycle(get_cycle, U);
			for (auto & x : a) {
				// std::cout << x + 1 << " ";
				if (x == U) {
					continue;
				}

				for (auto & y : adj[x]) {
					if (!in_cycle[y]) {
						adj[U].push_back(y);
					}
				}
			}

			dfs(dfs, U);
    		ans *= g[U][m];
    	}
    }

    std::cout << ans << "\n";
}

G - Prime Circuit

待补

标签:std,AtCoder,return,int,auto,self,VP,vector,387
From: https://www.cnblogs.com/maburb/p/18662981

相关文章

  • VP Codeforces Round 995 (Div. 3)
    A.PreparingfortheOlympiad题意,有两个数组a和b,如果你选了a数组中第i个,那么对手获得b数组第i+1个,求你们得分的差值最大。直接加上所有ai>bi+1的就行。点击查看代码voidsolve(){intn;std::cin>>n;std::vector<int>a(n),b(n);for(inti=0;......
  • 南京芯麒电子-基于KU115的3U VPX 高性能处理平台
    概述该平台是由16nm工艺的的KINTEXUltraScale+系列主器件XCKU115构建的一款标准3UVPX高性能数据处理平台,板载1组独立的DDR4SDRAM,存储带宽64位,2GHz数据率,最大支持4GByteDDR4SDRAM,提供1个FMC+接口、可搭配我司各类FMC子卡使用,实现数据采集回放。板卡设计满足工业级要求,可用于......
  • 产品创新为什么需要MVP流程
    01什么是MVP? 最近很多共创力客户在参加公开课或者现场咨询服务时,提到一个比较多的问题是:如何快速地打造产品原型?并得到市场的验证?尤其像美的、TCL、海信、格力、小米等电子电器类企业,产品迭代更新的周期较短,很多产品半年迭代升级一次,如工业设计、产品系列化设计、产品的性能等......
  • 南京芯麒电子-基于6U VPX的TMS320C6678+XCVU9P的高性能处理平台
    概述该平台是由16nm工艺的的XCUV9PFPGA和TI公司高性能数字信号处理器TMS320C6678构建的一款标准6UVPX高性能数据处理平台,VPXP1上定义4个x4GTY,P2上1路PCIex16接口、P3~P6上引出了大量GTY/GTH以及RS422/GPIO信号。板卡提供2个FMC+接口、可搭配我司各类FMC子卡使用,实现数据采集......
  • 南京芯麒电子-基于6U VPX的XCVU9P+ZU9EG的高性能处理平台
    **概述**该平台是由16nm工艺的的XCUV9P+ZU9EG构建的一款标准6UVPX高性能数据处理平台,VPXP1上定义4个x4GTY,P2上1路PCIex16接口、P3~P6上引出了大量GTY/GTH以及RS422/GPIO信号。板卡提供2个FMC+接口、可搭配我司各类FMC子卡使用,实现数据采集处理。板卡设计满足工业级要求,可用......
  • VP Codeforces Round 994 (Div. 2)
    A.MEXDestruction题意:给你一个数组,每次操作选择一个区间使这个区间变为区间mex,问最少操作使得数组全为0.容易发现,对任意一个区间,最多两次操作这个区间就会全变成0,于是我们想尽可能操作大的区间。但并不是直接操作整个数组一定更好,如果我们选择的区间里没有0,那么只需要一次操......
  • YOLO11改进:block优化 | PKIBlock多尺度卷积核,助力小目标涨点 | CVPR2024 PKINet 遥感
     ......
  • 经典案例系列分享:VPX特殊案例、Cisco与H3C建立“Gre Over IPsec“
    拓扑「模拟器、工具合集」复制整段内容链接:https://docs.qq.com/sheet/DV0xxTmFDRFVoY1dQ?tab=7ulgil简介PS:Center是cisco的设备,有固定的IP,但是Branch端是H3C的设备,没有固定IP,是通过ADSL上网的,而他们需要实现无论什么时候都能访问双方的资源,因为存在VOIP电话。现在问题......
  • 【即插即用完整代码】CVPR 2024部分单头注意力SHSA,分类、检测和分割SOTA!
    文章末尾,扫码添加公众号,领取完整版即插即用模块代码!适用于所有的CV二维任务:图像分割、超分辨率、目标检测、图像识别、低光增强、遥感检测等摘要(Abstract)背景与动机:近年来,高效的视觉Transformer(ViT)在资源受限的设备上表现出色,具有低延迟和良好的性能。传统的高效ViT模型......
  • GoWVP 全栈开发日记[1]:从 0 到实现 GB/T 28181 协议的完整实践
    GoWVP全栈开发日记[1]:从0到实现GB/T28181协议的完整实践服务端源代码https://github.com/gowvp/gb28181前端源代码https://github.com/gowvp/gb28181_web技术栈Golangv1.23,Gowebv1.x,Ginv1.10,Gormv1.25…React19,Vite6.x,Typescript,React-R......