第十五届吉林省赛个人题解【中档题(不过可能对你来说是简单题)】(H、G、C)

news2024/9/21 22:20:42

文章目录

  • H. Visit the Park(STL)
  • G. Matrix Repair(思维题)
  • C.Random Number Generator(BSGS算法)

H. Visit the Park(STL)

题意:给你一个无向图,每条边上都有一个数码,然后给你一个路径,每次你必须从Ai走到Ai+1(直接走到,必须相邻),如果有多条路径,你等概率的选择这些路径,这样从头走到尾,你依次把这些数码写下来,得到一个十进制数,现在问你最后可以得到的期望是多少?
思路:我们可以单独考虑每一位的贡献,个位上的某种在所有从左到右写下来的数的个位的占比仅和个位自身各种数码的比例有关,尽管高其他位右各种选择,但是个位上出现这个数码的概率是相同的。利用map我们维护总数,和各种数码出现的次数。
注意:这里容易被卡常,我们可以发现求逆元的常数为30,加上10个数码,如果放到循环內部的话,就是300,再乘上3e5,9e7加上其他常数,tle4了。所以必须放外面。logn最多是20,常数小1.5倍。

#include <bits/stdc++.h>
#define ll long long
#define inf 0x3f3f3f3f
#define eps 1e-9
using namespace std;
const int N = 3e5 + 5, mod = 998244853;
map<pair<int, int>, int> g[N];//这是一个map<pair<int,int>, int>为元素的数组
map<pair<int, int>, int> sum;
ll po(ll rad, ll idx) {
	ll res = 1;
	while (idx) {
		if (idx & 1) res = res * rad % mod;
		rad = rad * rad % mod;
		idx >>= 1;
	}
	return res;
}
int a[N];
void solve() {
	int n, m, k;
	cin >> n >> m >> k;
	for (int i = 0; i < m; i++) {
		int u, v, w;
		cin >> u >> v >> w;
		g[u][{v, w}]++;
		g[v][{u, w}]++;
		sum[{u, v}]++;
		sum[{v, u}]++;
	}
	for (int i = 1; i <= k; i++) cin >> a[i];
	ll ans = 0;
	for (int i = k; i > 1; i--) {
		int u = a[i], v = a[i - 1];
		int ss = sum[{u, v}];
		if (!ss) {
			cout << "Stupid Msacywy!\n";
			return;
		}
		ll mul = po(10, k - i), sub = po(ss, mod - 2);//这里很重要 
		for (int j = 1; j <= 9; j++) {
			if (g[u].count({v, j})) ans = (ans + mul * j % mod * g[u][{v, j}] % mod * sub % mod) % mod; 
		}
	}
	cout << ans << '\n';
}
int main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	int T = 1;
//	cin >> T;
	while (T--) {
		solve();
	}
	return 0;
}

G. Matrix Repair(思维题)

背景:在数据传输当中常见的奇偶性检查
题意:给你一个破损的矩阵,给你原来的矩阵的行列的奇偶性,让你复原这个矩阵,如果矩阵唯一,就输出这个矩阵,如果矩阵不唯一,就输出-1。
思路:(借用oiwiki的图)
在这里插入图片描述
我们如果把所有-1处和所在的行列列出方程,我们可以发现,如果说任何一行一列都不存在只有一个-1的情况,那么每条方程,至少有两个未知数。对于不同行,不同列,这些方程最多只有一个相同的未知元。(也就是某行和某列相交的情况有一个相同的未知元(-1)),因此我们无法通过加减消元解出任何一个确定的未知元,无论如何消元都至少有两个未知元。因此我们拓扑排序,逐步带入某个确定的未知元即可。

#include <bits/stdc++.h>
#define ll long long
#define inf 0x3f3f3f3f
#define eps 1e-9
using namespace std;
const int N = 1005, mod = 998244853;
int a[N][N], r[N], c[N], nr[N], nc[N];
set<int> g[N << 1];
void solve() {
	int n;
	cin >> n;
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= n; j++) {
			cin >> a[i][j];
		}
	}
	for (int i = 1; i <= n; i++) {
		cin >> nr[i];
		int s = 0;
		for (int j = 1; j <= n; j++) {
			if (a[i][j] == -1) {
				g[i].insert(j);
				continue;
			}
			s ^= a[i][j];
		}
		r[i] = s;
	}
	for (int j = 1; j <= n; j++) {
		cin >> nc[j];
		int s = 0;
		for (int i = 1; i <= n; i++) {
			if (a[i][j] == -1) {
				g[j + n].insert(i);
				continue;
			}
			s ^= a[i][j];
		}
		c[j] = s;
	}
	set<pair<int, int>> st;
	for (int i = 1; i <= n * 2; i++) {
		st.insert({g[i].size(), i});
	}
	while (!st.empty()) {
		pair<int, int> pii = *st.begin();
		int fi = pii.first, se = pii.second;
		st.erase(st.begin());
		if (fi == 0) continue;
		if (fi != 1) break;
		if (se > n) {//如果是某列的话 
			int x = *g[se].begin();//该列含有的唯一的-1 
			g[se].erase(g[se].begin());//删除-1 
			st.erase({g[x].size(), x});//-1所在行删除 
			int y = se - n;//对应列 
			g[x].erase(y);//对应行删除本列
			st.insert({g[x].size(), x});//更新对应行 
			a[x][y] = c[y] ^ nc[y];//填数字 
			c[y] = nc[y];//更新列 
			r[x] ^= a[x][y];//更新行 
		} else {
			int y = *g[se].begin();//该行含有的唯一的-1 
			g[se].erase(g[se].begin());//删除-1 
			int x = se;//对应行 
			st.erase({g[y + n].size(), y + n});//删除对应列,这里要+n 
			g[y + n].erase(x);
			st.insert({g[y + n].size(), y + n});//更新对应列 
			a[x][y] = r[x] ^ nr[x];//更新 
			r[x] = nr[x];
			c[y] ^= a[x][y];
		}
	}
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= n; j++) {
			if (a[i][j] == -1) {
				cout << -1 << '\n';
				return;
			}
		}
	}
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= n; j++) {
			cout << a[i][j] << " \n"[j == n];
		}
	}
}
int main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	int T = 1;
//	cin >> T;
	while (T--) {
		solve();
	}
	return 0;
}

C.Random Number Generator(BSGS算法)

题意:给定x0,a,b,m,问利用线性同余方法xi+1=axi+b(mod m)判断某个数是否在xn的集合内。
思路:参考这篇
补充一下如何求出等比式子,待定系数法。
A X n + 1 + B = a ( A X n + B ) AX_{n+1}+B=a(AX_n+B) AXn+1+B=a(AXn+B)
A X n + 1 = a A X n + a B − B = A a X n + A b AX_{n+1}=aAX_n+aB-B=AaX_{n}+Ab AXn+1=aAXn+aBB=AaXn+Ab
A = 1 , B = b a − 1 A=1,B=\frac{b}{a-1} A=1,B=a1b
评论:BSGS就是暴力根号分治加哈希。
关于特判:a= 1的时候b=0的时候是no,注意不要使用 a- 1作为逆元,0逆元会把人橄榄。

#include <bits/stdc++.h>
#define ll long long
#define inf 0x3f3f3f3f
#define eps 1e-9
using namespace std;
ll a, b, x0, m, x;
ll po(ll rad, ll idx) {
	ll res = 1;
	while (idx) {
		if (idx & 1) res = res * rad % m;
		rad = rad * rad % m;
		idx >>= 1;
	}
	return res;
}
ll bsgs(ll a, ll b) {
	map<ll, ll> mp;
	ll cur = 1, t = sqrtl(m) + 1;
	for (int B = 1; B <= t; B++) {
		cur = cur * a % m;
		mp[cur * b % m] = B;
	}
	ll now = cur;
	for (int A = 1; A <= t; A++) {
		if (mp.count(now)) return A * t - mp[now];
		now = now * cur % m;
	}
	return -1;
}
void solve() {
	cin >> a >> b >> m >> x0 >> x;
	if (x == x0) {
		cout << "YES\n";
		return;
	}
	if (a == 0) {
		cout << (x == b % m ? "YES\n" : "NO\n");
		return;
	}
	if (a == 1) {
		if (b == 0) {
			cout << "NO\n";
			return;
		} 
	}
	ll aa = a;
	ll bb = (x * (a - 1) + b % m) % m * po((x0 * (a - 1) + b) % m, m - 2) % m;
	cout << (bsgs(aa, bb) == -1 ? "NO\n" : "YES\n");
}
int main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	int T = 1;
//	cin >> T;
	while (T--) {
		solve();
	}
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/511021.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【EHub_tx1_tx2_A200】Ubuntu18.04 + ROS_ Melodic + 锐驰LakiBeam 1L单线激光 雷达评测

大家好&#xff0c;我是虎哥&#xff0c;最近这段时间&#xff0c;又手欠入手了锐驰LakiBeam 1L激光雷达&#xff0c;实在是性价比太优秀&#xff0c;话说&#xff0c;最近激光雷达圈确实有点卷。锐驰官网的资料已经很丰富&#xff0c;我这里总结一下自己的简单测试经验&#x…

挑战14天学完Python---

抛弃了数学思维,引入了计算思维,计算思维是抽象和自动化相结合的结果 抽象:抽象问题的形式化逻辑 自动化:将抽象的结果通过程序自动实现 0.1在计算机内部转二进制 0.1转二进制 二进制的0.1与二进制0.2计算 结果再转十进制 在众多编程语言中 ,只有Python语言提供了复数类型.空间…

OpenCL编程指南-1.2OpenCL基本概念

OpenCL概念基础 面向异构平台的应用都必须完成以下步骤&#xff1a; 1&#xff09;发现构成异构系统的组件。 2&#xff09;探查这些组件的特征&#xff0c;使软件能够适应不同硬件单元的特定特性。 3&#xff09;创建将在平台上运行的指令块&#xff08;内核)。 4&#xff09…

紧跟 AI 步伐, Gitee 已支持 AI 模型托管

AI 时代已经来了&#xff01; 现在&#xff0c;越来越多的企业和个人开始使用 AI 技术来解决各种问题。想要了解 AI&#xff0c;那么就一定要了解 AI 模型&#xff0c;作为 AI 的核心技术之一&#xff0c;AI 模型为各种进阶的人工智能应用奠定了基础&#xff0c;从 ChatGPT 、…

Mysql 存储过程+触发器+存储函数+游标

视图&#xff08;view&#xff09; 虚拟存在的表&#xff0c;不保存查询结构&#xff0c;只保存查询的sql逻辑 语法 存储过程 实现定义并存储在数据库的一段sql语句的集合&#xff0c;可减少网络交互&#xff0c;提高性能&#xff0c;代码复用,内容包括&#xff1a;变量&am…

并发编程进阶

并发编程进阶 文章目录 并发编程进阶一、JMM1. JMM的定义&#xff1a;2. 内存屏障&#xff1a; 三. volatile四. as-if-serial五. happens-before六. 缓存一致性&#xff08;Cache coherence&#xff09;7. Synchronized1. synchronized 的使用2. synchronized底层原理 8. Conc…

Web3.0介绍与产业赛道(去中心化,金融与数字资产,应用与存储,区块链技术)

文章目录 1、web3.0时代——区块链技术2、产业赛道&#xff1a;去中心化金融与数字资产3、产业赛道&#xff1a;去中心化应用与存储4、区块链&#xff1a;基础设施与区块链安全和隐私 1、web3.0时代——区块链技术 Web3.0是什么 Web3.0是指下一代互联网技术&#xff0c;它将在…

最优化理论-线性规划的标准形

目录 一、引言 二、线性规划的标准形 1. 线性规划的定义 2. 线性规划的标准形 3. 线性规划的约束条件 三、线性规划的求解方法 1. 单纯形法 2. 内点法 3. 割平面法 四、线性规划的应用 1. 生产计划 2. 运输问题 3. 投资组合问题 五、总结 一、引言 最优化理论是…

数据链路层及其重要协议——以太网

文章目录 数据链路层前言1. 以太网协议2. MTU&#xff08;传输的限制&#xff09;3. ARP协议 数据链路层 前言 以太网&#xff1a; 不是一种具体的网络&#xff0c;而是一种技术标准。既包含了数据链路层的内容&#xff0c;也包含了一些物理层的内容&#xff0c;例如&#xf…

网络层——IP协议详细解读

文章目录 IP协议1. IP协议的报文格式2. IP协议的地址管理3. IP地址的组成4. IP协议的路由选择 IP协议 之前介绍了传输层的重点协议&#xff0c;TCP和UDP协议&#xff0c;以下将介绍网络层的重点协议IP协议。 1. IP协议的报文格式 IP地址 本质上是一个32位整数&#xff0c;在…

华为OD机试真题 Java 实现【不爱施肥的小布】【2023Q2】

一、题目描述 某农村主管理了一大片果园&#xff0c;fields[i]表示不同国林的面积&#xff0c;单位m2&#xff0c;现在要为所有的果林施肥且必须在n天之内完成&#xff0c;否则影响收成。小布是国林的工作人员&#xff0c;他每次选择一片果林进行施肥&#xff0c;且一片国林施…

【Linux初阶】环境变量 | 如何设置、获取环境变量?

&#x1f31f;hello&#xff0c;各位读者大大们你们好呀&#x1f31f; &#x1f36d;&#x1f36d;系列专栏&#xff1a;【Linux初阶】 ✒️✒️本篇内容&#xff1a;讨论为什么指令作为一个可执行程序不需要加 ./运行&#xff1b;环境变量为什么会自己恢复&#xff1b;环境变量…

Acwing456. 车站分级

一条单向的铁路线上&#xff0c;依次有编号为 1, 2, …, n的 n 个火车站。 每个火车站都有一个级别&#xff0c;最低为 1 级。 现有若干趟车次在这条线路上行驶&#xff0c;每一趟都满足如下要求&#xff1a;如果这趟车次停靠了火车站 xx&#xff0c;则始发站、终点站之间…

【网络】-- 数据链路层

应用层&#xff08;http、https&#xff09;&#xff1a; 数据的使用。传输层&#xff08;UDP、TCP&#xff09;&#xff1a;网络通讯的细节&#xff0c;将数据可靠的从A主机跨网络送到B主机。网络层&#xff08;IP&#xff09;&#xff1a;提供一种能力&#xff0c;将数据从A主…

Real-ESRGAN:Training Real-World Blind Super-Resolution with Pure Synthetic Data

https://github.com/NightmareAI/Real-ESRGAN/tree/masterhttps://github.com/NightmareAI/Real-ESRGAN/tree/master从SRCNN到EDSR&#xff0c;总结深度学习端到端超分辨率方法发展历程 - 知乎超分辨率技术&#xff08;Super-Resolution, SR&#xff09;是指从观测到的低分辨率…

设计模式MVC、MVP、MVVM

MVC、MVP和MVVM是什么&#xff1f; MVC&#xff1a;Model-View-Controller&#xff0c;是一种分层解偶的框架&#xff0c;Model层提供本地数据和网络请求&#xff0c;View层处理视图&#xff0c;Controller处理逻辑&#xff0c;存在问题是Controller层和View层的划分不明显&am…

SpringBoot+@Validate+全局异常拦截实现自定义规则参数校验(校验get请求参数不能为空且在指定枚举类型中)

场景 SpringBootValidated实现参数验证(非空、类型、范围、格式等)-若依前后端导入Excel数据并校验为例&#xff1a; SpringBootValidated实现参数验证(非空、类型、范围、格式等)-若依前后端导入Excel数据并校验为例_validated 怎么设置boolean类型非空_霸道流氓气质的博客-…

Elasticsearch02

目录 Elasticsearch02DSL查询文档查询所有全文检索查询精确查询地理查询复合查询 搜索结果处理排序分页高亮 DSL总结RestClient查询文档快速入门:match_all查询match查询精确查询布尔查询排序、分页高亮 实战案例HotelControllerIHotelServiceHotelMapperHotelHotelDocPageResu…

Google SEO优化的10大误区

以下是 Google SEO 优化的十大误区&#xff1a; 1、关键词堆砌&#xff1a; 过度使用关键词&#xff0c;使得内容不自然&#xff0c;难以阅读&#xff0c;同时也会被搜索引擎认为是垃圾信息&#xff0c;影响网站排名。 2、内容质量差&#xff1a; 质量差的内容会降低用户的体…

矩池云上配置FusionGan环境

1、租赁环境 2、vscode 连接 矩池云 教程&#xff1a;https://www.matpool.com/supports/doc-vscode-connect-matpool/ 3、进入mnt文件夹 cd ../mnt 4、克隆代码 git clone https://github.com/jiayi-ma/FusionGAN.git 如果克隆不下来&#xff0c;就自己下载&#xff0c;…