2023年ICPC济南站G题

2024-03-13 22:12
文章标签 2023 icpc 济南

本文主要是介绍2023年ICPC济南站G题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Gifts from Knowledge

题意

给定r行c列的01矩阵,可以对每一行进行翻转,也可以不进行操作,翻转的意思是将一开始的序列{ a 1 , a 2 , … , a n a_{1}, a_{2}, \dots, a_{n} a1,a2,,an}翻转为{ a n , … , a 2 , a 1 a_{n},\dots,a_{2},a_{1} an,,a2,a1},使得最终得到的01矩阵的每一列的1的个数不多于1个,问有多少种翻转方案,对结果模1e9+7

分析

容易知道的是,设第i列和第c-i+1列总的1的个数为x,当x$\geq 3 后,无解,当 x 3后,无解,当x 3后,无解,当x\leq$1时,无论怎么操作,这两列永远合法,所以最终只需要考虑当x=2时。

当x=2时有两种情况,假设两个1分别位于第x和y行

  • 初始时,两个1位于同一列,那么能进行的操作就是{(翻转x,y不动),(不动x,翻转y)}
  • 初始时,两个1位于不同列,那么能进行的操作就是{(翻转x,翻转y),(不动x,不动y)}

由此两种情况我们可以发现,当同一对x和y同时拥有以上两种情况的时候是无解的,比如:

2 6
101010
100100

这个样例就是无解的,因此需要做的就是使用扩展域并查集,i表示翻转第i行,i+n表示不翻转第i行,因此,当两个1位于同一列的时候,合并(x, y+n)和(x+n, y),当两个1位于不同列的时候,合并(x, y)和(x+n, y+n),注意要判断i和i+n是否在一个连通块内,答案就是 2 连通块的个数 2^{连通块的个数} 2连通块的个数

代码

#include <bits/stdc++.h>
using namespace std;
using LL = long long;
const int mod = 1e9 + 7;
void Solve() {int n, m;cin >> n >> m;vector<string> a(n + 1);vector<vector<int> > G(m + 1);for (int i = 1; i <= n; i++) {cin >> a[i];a[i] = ' ' + a[i];bool ok = false;for (int j = 1; j <= m; j++) {if (a[i][j] == '1') {G[j].emplace_back(i);ok = true;}}}vector<int> fa(2 * n + 1);iota(fa.begin(), fa.end(), 0);auto getfa = [&](int x, auto getfa) -> int {return x == fa[x] ? x : fa[x] = getfa(fa[x], getfa);};for (int i = 1; i <= m; i++) {if (i == m - i + 1) {if (G[i].size() > 1) {cout << "0\n";return;}} else {if (G[i].size() + G[m - i + 1].size() >= 3) {cout << "0\n";return;}if (G[i].size() + G[m - i + 1].size() == 2) {vector<int> z;for (auto it : G[i]) {z.emplace_back(it);}for (auto it : G[m - i + 1]) {z.emplace_back(it);}if (G[i].size() == 1) {int f1 = getfa(z[0], getfa), f2 = getfa(z[1], getfa);if (f1 != f2) {fa[f1] = f2;}f1 = getfa(z[0] + n, getfa), f2 = getfa(z[1] + n, getfa);if (f1 != f2) {fa[f1] = f2;}} else {int f1 = getfa(z[0], getfa), f2 = getfa(z[1] + n, getfa);if (f1 != f2) {fa[f1] = f2;}f1 = getfa(z[0] + n, getfa), f2 = getfa(z[1], getfa);if (f1 != f2) {fa[f1] = f2;}}}}}for (int i = 1; i <= n; i++) {if (getfa(i, getfa) == getfa(i + n, getfa)) {cout << "0\n";return;}}LL ans = 1;for (int i = 1; i <= n; i++) {if (getfa(i, getfa) == i) {ans = ans * 2 % mod;}}cout << ans << '\n';
}
int main() {std::ios::sync_with_stdio(false);std::cin.tie(nullptr);int T;cin >> T;while (T--) {Solve();}return 0;
}

吐槽

济南站现场一直没想到合适的反例,一直wa到结束,不然就有牌牌了QAQ

这篇关于2023年ICPC济南站G题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/806359

相关文章

CSP 2023 提高级第一轮 CSP-S 2023初试题 完善程序第二题解析 未完

一、题目阅读 (最大值之和)给定整数序列 a0,⋯,an−1,求该序列所有非空连续子序列的最大值之和。上述参数满足 1≤n≤105 和 1≤ai≤108。 一个序列的非空连续子序列可以用两个下标 ll 和 rr(其中0≤l≤r<n0≤l≤r<n)表示,对应的序列为 al,al+1,⋯,ar​。两个非空连续子序列不同,当且仅当下标不同。 例如,当原序列为 [1,2,1,2] 时,要计算子序列 [

HNU-2023电路与电子学-实验3

写在前面: 一、实验目的 1.了解简易模型机的内部结构和工作原理。 2.分析模型机的功能,设计 8 重 3-1 多路复用器。 3.分析模型机的功能,设计 8 重 2-1 多路复用器。 4.分析模型机的工作原理,设计模型机控制信号产生逻辑。 二、实验内容 1.用 VERILOG 语言设计模型机的 8 重 3-1 多路复用器; 2.用 VERILOG 语言设计模型机的 8 重 2-1 多

2023 CCPC(秦皇岛)现场(第二届环球杯.第 2 阶段:秦皇岛)部分题解

所有题目链接:Dashboard - The 2023 CCPC (Qinhuangdao) Onsite (The 2nd Universal Cup. Stage 9: Qinhuangdao) - Codeforces 中文题面: contest-37054-zh.pdf (codeforces.com) G. Path 链接: Problem - G - Codeforces

2014年ACM/ICPC亚洲区现场赛广州赛区总结

本来不想提这件事的,后来学姐找我谈心时提到这件事,我突然意识到在这件事情上我错了一次,明明答应的去参加这场比赛,最后临时决定不去......其实中间有很多很多原因 1:我和tyh,sxk临时不去主要是广州太远,我们身上money不够,呵呵。。。别笑我们,你以为我们是高富帅啊,去一趟广州消费要2个月的生活费,奖学金又没发,你让我找我妈要她辛辛苦苦挣来的工资吗?!从哈尔滨到广州单来回的火车票每个人就

HNU-2023电路与电子学-实验1

写在前面: 这是电路与电子学课程的第一次实验,按照指导书的需求在Multisim软件搭建一个电路传感器模型,难度较小,细心完成就没有问题。 小tips:22级实验是采用上传到测试平台来进行功能检测,如果不通过则会打回修改后再重新提交,(我们那时候的评测系统特别特别慢,一次只能测一个同学,剩下同学就排队等着,久的时候甚至超过10个小时),这里列举一个常见的错误:热噪声有+号这端需要连接有源滤波器

【python】—— Python爬虫实战:爬取珠海市2011-2023年天气数据并保存为CSV文件

目录 目标 准备工作 爬取数据的开始时间和结束时间 爬取数据并解析 将数据转换为DataFrame并保存为CSV文件         本文将介绍如何使用Python编写一个简单的爬虫程序,以爬取珠海市2011年至2023年的天气数据,并将这些数据保存为CSV文件。我们将涉及到以下知识点: 使用requests库发送HTTP请求使用lxml库解析HTML文档使用dateti

Acrobat Pro DC 2023 for Mac/Win:全能型PDF编辑器深度解析

Adobe Acrobat Pro DC 2023作为一款跨平台的PDF编辑器,无论是对于Mac还是Windows用户,都提供了极为全面且强大的PDF处理功能。该软件凭借其卓越的性能和丰富的特性,成为了全球范围内用户处理PDF文档的首选工具。 一、强大的编辑功能 Acrobat Pro DC 2023内置了多种编辑工具,如文本编辑器、图片替换、页面调整等,使用户能够轻松地对PDF文档进行修改和

【行业报告】2023年消除类手游全球市场洞察

​更多消除内容: 长线消除游戏商业化设计案例:《梦幻花园》 - 游戏干饭之家 谈谈《开心消消乐》是如何做游戏商业化活动 - 游戏干饭之家 消除游戏展现了从简单的游戏玩法到复杂的社交互动,再到精细化运营的发展历程,其通过不断的创新和适应现代游戏的市场变化,依然活跃在市场的前沿 一、消除游戏分类定义 二、消除手游市场现状分析 消除手游近两年下载量增速表现优于整体手游表现,下

【数据分享】2000—2023年我国省市县三级逐月归一化植被指数(NDVI)数据(Shp/Excel格式)

之前我们分享过2000—2023年逐月归一化植被指数(NDVI)栅格数据(可查看之前的文章获悉详情),该数据来源于NASA定期发布的MOD13A3数据集!很多小伙伴拿到数据后反馈栅格数据不太方便使用,问我们能不能把数据处理为更方便使用的Shp和Excel格式的数据! 我们特地对数值在-0.2—1之间的NDVI栅格数据进行了处理,将2000-2023年逐月的归一化植被指数栅格分别按照我国省级行政边

Update Azure OpenAI npm Package to 2023-12-01-preview Version

题意:将 Azure OpenAI npm 包更新到 2023-12-01-preview 版本 问题背景: I am currently using the azure-openai npm package in my project with version 2023-03-15-preview. As per the latest updates, version 2023-12