Codeforces Round 948 (Div. 2) D. XORificator(哈希)

题目

n*m(n*m<=3e5)的矩阵,

实际为t(t<=1e4)组样例,但保证sum n*m不超过3e5

你可以选一行把所有01翻转,问最多可以让多少列只有一个1,然后把你翻转的行输出

思路来源

其实题还挺裸的,教了一下潘老师,看在这题分数还不低的情况下,写一下题解吧

题解

枚举aij,即枚举一下哪列的哪个数字在答案里,这样其他行翻转的状态是唯一确定的,

哈希记录一下,并记录取得答案的aij,每次转移是o(1)的,只要哈希不冲突即可

单哈希是会被卡的,所以可以双哈希或者mt_19937

代码1(mt_19937)

#include <bits/stdc++.h>
#define endl '\n'
#define ll long long
#define vint vector<int>
#define pii pair<int, int>
#define rep(i, a, b) for (int i = int(a); i < int(b); i++)
#define rng(i, a, b) for (int i = int(a); i <= int(b); i++)
#define per(i, a, b) for (int i = int(b) - 1; i >= int(a); i--)
#define gnr(i, a, b) for (int i = int(b); i >= int(a); i--)
using namespace std;
#define MT
#ifdef MT
void flip(int& c)
{c=!c;
}const int M = 1e9+7;void solve()
{mt19937_64 rnd((unsigned int) chrono::steady_clock::now().time_since_epoch().count());int n, m;cin >> n >> m;vector<string> mp(n);vector<uint64_t> ran(n);ll t = 1;rep(i, 0, n){cin >> mp[i];ran[i]=rnd();}map<uint64_t, int> cnt;pair<int, pair<int,int>> ans = { 0, {0, 0} };rep(i, 0, m){uint64_t hash=0;vint state(n);if (mp[0][i] == '0'){state[0] = 1;hash+=ran[0];}rep(j, 1, n){if (mp[j][i] == '1') {state[j] = 1;hash+=ran[j];}}ans = max(ans, { ++cnt[hash], {i,0}});rep(j, 1, n){hash+=(!state[j-1])*ran[j-1]-state[j-1]*ran[j-1];flip(state[j - 1]);hash+=(!state[j])*ran[j]-state[j]*ran[j];flip(state[j]);ans = max(ans, { ++cnt[hash], {i,j}});}}cout << ans.first << endl;auto [x,y] = ans.second;//cout<<x<<':'<<y<<endl;rep(j,0,n){bool b = mp[j][x]-'0';if((b&&(j!=y)) || ((!b)&&(j==y))){cout<<1;}else{cout<<0;}}cout<<endl;
}
#endifint main(void)
{std::ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);#ifdef MTint t;cin >> t;rep(i, 0, t) solve();
#endif
}

代码2(双哈希)

#include <bits/stdc++.h>
#include <iostream>
#include <map>
#define endl '\n'
#define ll long long
#define vint vector<int>
#define pii pair<int, int>
#define rep(i, a, b) for (int i = int(a); i < int(b); i++)
#define rng(i, a, b) for (int i = int(a); i <= int(b); i++)
#define per(i, a, b) for (int i = int(b) - 1; i >= int(a); i--)
#define gnr(i, a, b) for (int i = int(b); i >= int(a); i--)
using namespace std;
#define MT
#ifdef MTvoid flip(int& c)
{c=!c;
}const int M = 1e9+7,M2=1e9+9;void solve()
{int n, m;cin >> n >> m;vector<string> mp(n);srand(time(NULL));vector<ll> ran(n),ran2(n);ll t = 1, t2=1;rep(i, 0, n){cin >> mp[i];ran[i]=rand()*t%M;ran2[i]=rand()*t2%M2;t<<=1;t2<<=1;t%=M;t2%=M2;}map<pair<ll,ll>, int> cnt;pair<int, pair<int,int>> ans = { 0, {0, 0} };rep(i, 0, m){ll hash=0,hs2=0,cur=0;vint state(n);if (mp[0][i] == '0'){state[0] = 1;hash+=ran[0];hs2+=ran2[0];hash%=M;hs2%=M2;}rep(j, 1, n){if (mp[j][i] == '1') {state[j] = 1;hash+=ran[j];hs2+=ran2[j];hash%=M;hs2%=M2;}}ans = max(ans, { ++cnt[make_pair(hash,hs2)], {i,0}});rep(j, 1, n){hash+=M+(!state[j-1])*ran[j-1]-state[j-1]*ran[j-1];hs2+=M2+(!state[j-1])*ran2[j-1]-state[j-1]*ran2[j-1];hash%=M;hs2%=M2;flip(state[j - 1]);hash+=M+(!state[j])*ran[j]-state[j]*ran[j];hash%=M;hs2+=M2+(!state[j])*ran2[j]-state[j]*ran2[j];hs2%=M2;flip(state[j]);ans = max(ans, { ++cnt[make_pair(hash,hs2)], {i,j}});}}cout << ans.first << endl;auto [x,y] = ans.second;//cout<<x<<':'<<y<<endl;rep(j,0,n){bool b = mp[j][x]-'0';if((b&&(j!=y)) || ((!b)&&(j==y))){cout<<1;}else{cout<<0;}}cout<<endl;
}
#endifint main(void)
{std::ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);#ifdef MTint t;cin >> t;rep(i, 0, t) solve();
#endif
}

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

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

相关文章

UIAbility的使用

UIAbility概述 UIAbility是一种包含用户界面的应用组件&#xff0c;主要用于和用户进行交互。UIAbility也是系统调度的单元&#xff0c;为应用提供一系列的窗口&#xff0c;应用在这些窗口里绘制用户交互界面。 每一个UIAbility实例&#xff0c;都对应于一个最近任务列表中的任…

28【Aseprite 作图】苹果——拆解

1 画苹果框架 左边:第一行 7 第二行 2 第三 四行1 竖着7行 竖着2行 竖着1 、1 行 横着2个 横着4个 苹果可以是左右对称的,完成上述后,水平翻转到右边 2 枝叶 第一行1 左边 2 3 4 行,各1 第5行,竖着4个 再横着3个 右边 竖着3个,然后斜着2个,然后斜着1个 最上面的,两个…

靶机Moonraker_1练习报告

Moonraker: 1靶机练习实践报告 一、安装靶机 靶机是.ova文件&#xff0c;需要用VirtualBox打开&#xff0c;但我习惯于使用VMWare,因此修改靶机文件&#xff0c;使其适用于VMWare打开。 解压ova文件&#xff0c;得到.ovf文件和.vmdk文件。 直接用VMWare打开.ovf文件即可。 …

【服务器报错】Pycharm运行服务器代码提示 can‘t open file “本地文件路径“

1. 问题 Pycharm连接远程服务器&#xff0c;代码已经同步&#xff0c;运行时候报错 #模拟报错 bash: line 0: cd: G:/python/hhh/Hi: No such file or directory /home/hhh/anaconda3/envs/hard/bin/python: cant open file G:/python/hhh/hi/hei.py: [Errno 2] No such file…

springMVC工作流程

大家好&#xff0c;这里是教授.F 1.浏览器会先发送请求url&#xff0c;前端控制器/中央控制器/分发器&#xff08;也就是DispatcherServlet&#xff09;进行获取。 2.此时前端控制器会调用HandlerMapping处理器映射器&#xff0c;然后返回处理器执行器链&#xff08;HandlerExe…

Android Service 启动流程

在早些年学习Android的时候&#xff0c;对Service有过总结&#xff0c;但是主要是如何去使用&#xff0c;注意事项&#xff0c;startService和bindService的区别。 Android Service_public int onstartcommand(intent intent, int flags-CSDN博客 但是今天从源码来总结下fram…

使用Python类的构造函数和析构函数

1、问题背景 当使用Python类时&#xff0c;可以使用构造函数和析构函数来初始化和清理类实例。构造函数在创建类实例时自动调用&#xff0c;而析构函数在删除类实例时自动调用。 在上面的代码示例中&#xff0c;Person类具有一个构造函数__init__和一个析构函数__del__。构造…

【代码】自定义函数

你有没有听过 n! ? n!n(n-1)(n-2)21 你想不想有一个c函数 jc() 专门用来计算n!&#xff1f; 不好意思&#xff0c;没有&#xff01;c函数库说。没有咱自己可以造呀&#xff01; 哈喽大家好&#xff0c;我是学霸小羊&#xff0c;今天讲讲自定义函数。 自定义函数的定义格式…

网易面试:手撕定时器

概述&#xff1a; 本文使用STL容器-set以及Linux提供的timerfd来实现定时器组件 所谓定时器就是管理大量定时任务&#xff0c;使其能按照超时时间有序地被执行 需求分析&#xff1a; 1.数据结构的选择&#xff1a;存储定时任务 2.驱动方式&#xff1a;如何选择一个任务并执…

CSS,HTML,JS 以及Vue前端面试题八股文总结【看完你就变高手】

■ 符号说明 &#x1f498; 主题 &#x1f31f; 常见重要 &#x1f31b; 需要有印象的 &#x1f195; v3新特性 ■ 杂谈 &#x1f31b; SEO优化 合理的title、description、keywords&#xff1a;搜索对着三项的权重逐个减小&#xff0c;title值强调重点即可&#xff1b;descrip…

东软的第三个研发基地,为什么选择了武汉?

继沈阳、大连之后&#xff0c;东软集团在国内打造的第三个研发基地——武汉东软软件园&#xff0c;于2024年5月25日正式开园。 “占地面积158亩、建筑面积14万余平方米的武汉东软软件园&#xff0c;从开工到竣工仅仅用了18个月的时间。这样的建设速度&#xff0c;充分体现了武汉…

2.开发环境介绍

开发环境介绍三种&#xff1a;第一种是在线开发环境、第二种是Windows下的开发环境、第三种是Linux下的开发环境。 1.在线开发环境 2.Windows下的开发环境 用的比较多的是Devc&#xff0c;新手适合使用&#xff0c;上手快&#xff0c;简单&#xff0c;方便。 Devc使用&#x…

蓝桥杯练习系统(算法训练)ALGO-932 低阶行列式计算

资源限制 内存限制&#xff1a;64.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述 给出一个n阶行列式(1<n<9)&#xff0c;求出它的值。 输入格式 第一行给出两个正整数n,p&#xff1b;   接下来n行&…

【JavaScript】P2 JavaScript 书写位置

本博文总结&#xff1a; JavaScript 书写位置&#xff1a; 内部外部行内 注意事项&#xff1a; 书写的位置尽量写到 </body> 之前外部 js 标签中间不写任何内容&#xff0c;因为不予以展示 正文&#xff1a; 交互效果示例 一个简单的交互效果示例&#xff1b; <…

【从零开始学习RabbitMQ | 第一篇】如何确保生产者的可靠性

目录 前言&#xff1a; 生产者重连机制&#xff1a; 生产者确认机制&#xff1a; Publisher Confirm&#xff08;生产者者确认&#xff09; Publish Return&#xff08;发布返回&#xff09; 总结&#xff1a; 前言&#xff1a; 在现代的分布式系统中&#xff0c;消息队…

【NumPy】关于numpy.divide()函数,看这一篇文章就够了

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

zabbix监控mysql

一、mysql数据库监控的内容有 mysql的吞吐量 mysql的常规操作&#xff08;增删改查&#xff09; QPS&#xff08;Questions Per second:&#xff09;每秒能处理多少次请求数 TPS&#xff08;Transactions Per Second&#xff09;每秒查询处理的事务数 mysql库大小和表大小 监控…

欧科云链:Web3.0时代 具备链上数据分析能力的公司愈发凸显其价值

在当今激烈的市场竞争中&#xff0c;新兴互联网领域迅速崛起&#xff0c;Web2.0已相对成熟&#xff0c;用户创造数据&#xff0c;但不拥有数据。被视为新的价值互联网的Web3.0&#xff0c;赋予用户真正的数据自主权&#xff0c;它的到来被认为是打破Web2.0垄断的机遇。 在Web3…

迅狐跨境商城系统源码

在当今全球化的商业环境中&#xff0c;跨境电商的兴起为商家提供了无限的可能性。为了满足这一需求&#xff0c;跨境商城系统源码的开发显得尤为重要。本文将探讨跨境商城系统源码的优势&#xff0c;以及如何利用这些优势来构建一个成功的跨境电商平台。 独立开发&#xff0c;…

LLM 大模型学习必知必会系列(十三):基于SWIFT的VLLM推理加速与部署实战

LLM 大模型学习必知必会系列(十三)&#xff1a;基于SWIFT的VLLM推理加速与部署实战 1.环境准备 GPU设备: A10, 3090, V100, A100均可. #设置pip全局镜像 (加速下载) pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/ #安装ms-swift pip install ms-…