【bzoj5001】搞事情 暴力
题目描述
输入
输出
样例输入
4 4
1 0 0 1
0 1 1 0
0 1 1 0
1 0 0 1
样例输出
0 0 0 0
1 0 0 1
1 0 0 1
0 0 0 0
题解
暴力
高斯消元暴枚自由元的复杂度不会证。。。就没有写。
事实上,可以发现,如果枚举第一行怎么选的话,第一行确定了,第一行和第二行共同影响第一行,因此第二行就确定了;第二行确定了,第一、二、三行共同影响第二行,因此第三行就确定了;……;第 $n-2$ 、$n-1$ 、$n$ 行共同影响第 $n-1$ 行,因此第 $n$ 行就确定了。
所以只需要枚举第一行的选择,可以推出 $2\sim n$行的选择,然后判断第$n$ 行是否成立即可。
二进制压一行为一个数,枚举第一行的选择,然后维护第 $i$ 行选了什么(代码中的 $b[]$ ),以及选择了前 $i$ 行后第 $i$ 行的状态时什么(代码中的 $c[]$ )。如果 $c[n]=0$ 则可行,此时统计所有 $b[]$ 中1的个数即为选择的次数。
最后输出答案即可。
注意特判无解的情况,以及 $IMPOSSlBLE$ 中倒数第4个字母的情况,以及输出格式的情况。
时间复杂度 $O(n·2^m)$
#include <cstdio>
int cnt[1050000] , a[21] , b[21] , c[21] , ans[21];
int main()
{
int n , m , p , i , j , t , x , mn = 1 << 30;
scanf("%d%d" , &n , &m) , p = (1 << m) - 1;
for(i = 1 ; i <= n ; i ++ )
for(j = 1 ; j <= m ; j ++ )
scanf("%d" , &x) , a[i] = a[i] << 1 | x;
for(i = 1 ; i <= p ; i ++ ) cnt[i] = cnt[i - (i & -i)] + 1;
for(i = 0 ; i <= p ; i ++ )
{
b[1] = i , c[1] = (i ^ (i << 1) ^ (i >> 1) ^ a[1]) & p;
for(j = 2 ; j <= n ; j ++ )
b[j] = c[j - 1] , c[j] = (b[j - 1] ^ b[j] ^ (b[j] << 1) ^ (b[j] >> 1) ^ a[j]) & p;
if(!c[n])
{
t = 0;
for(j = 1 ; j <= n ; j ++ )
t += cnt[b[j]];
if(t < mn)
{
mn = t;
for(j = 1 ; j <= n ; j ++ )
ans[j] = b[j];
}
}
}
if(mn == 1 << 30) puts("IMPOSSlBLE");
else
for(i = 1 ; i <= n ; i ++ )
for(j = m - 1 ; ~j ; j -- )
printf("%d%c" , (bool)(ans[i] & (1 << j)) , j ? ' ' : '\n');
return 0;
}
【bzoj5001】搞事情 暴力的更多相关文章
- sql注入搞事情(连载一)
SQL注入搞事情(连载一) 概述 写在最前面 为了有个合理的训练计划,山人准备长期开放自己的训练计划以及内容以供大家参考.山人专业是信息对抗技术,不是web方向的博客保证句句手打,如有问题请及时小窗. ...
- 搞事情?Spring Boot今天一口气发布三个版本
学无止境?本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈.MyBatis.JVM.中间件等小而美的专栏供以免费学习.关注公众号[BAT的乌托邦]逐个击 ...
- 教你利用Node.js漏洞搞事情
PentestingNode.js Application : Nodejs Application Security 原文地址:http://www.websecgeeks.com/2017/04/ ...
- 搞事情 -- python之线程
简介 操作系统线程理论 线程概念的引入背景 线程的特点 进程和线程的关系 使用线程的实际场景 用户级线程和内核级线程(了解) 线程和python 理论知识 线程的创建Threading.Thread类 ...
- python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。
昨天小帅b看到一些事情不顺眼 有人偷换概念 忍不住就写了一篇反讽 996 的 看不下去了,我支持996,年轻人就该996! 没想到有些人看不懂 这就算了 还来骂我 早些时候关注我的小伙伴应该知道我第一 ...
- 爱搞事情的webpack
webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler). 当 webpack 处理应用程序时,它会递归地构建一个依赖关系图(dependency g ...
- 周六搞事情,微信小程序开发文档已放出!
程序员们,你们有事干了! 个人感觉不管是什么形式的UI技术,都无法决定一个产品的生死,核心还是服务和模式的创新. 某些方面和ApiCloud好像,但发展前景远远胜过ApiCloud. 微信小程序可以为 ...
- bootstrap,bootstrap-table,bootstrapValidator,animate,layer配合起来搞事情
资源准备(just download) bootstrap: http://www.bootcss.com/ bootstrap-table: http://bootstrap-table.wenzh ...
- 【搞事情】VS2015下的openGL初始化
环境:glfw+glew+visual studio 2015 原材料下载链接: glfw 下载 glew 下载 glm库 下载 cmake 下载 (我下载的时候有些官网戳不开(大概校园网问题)... ...
随机推荐
- 汇编中resb这样的指令是什么意思?
转载下来,方便以后查看 原作网址:http://blog.csdn.net/m1j2t3/article/details/5681657 汇编中resb这样的指令是什么意思? 还有我在汇编程序中看到这 ...
- 利用Python Counter快速计算出现次数topN的元素
需要用Python写一段代码,给定一堆关键词,返回出现次数最多的n个关键字. 第一反应是采用一个dict,key存储关键词,value存储出现次数,如此一次遍历即可得出所有不同关键词的出现次数,而后排 ...
- Tomcat - 远程调试配置
复制一份startup.bat,更名为“startup-debug”. 替换内容如下: call "%EXECUTABLE%" start %CMD_LINE_ARGS% 替换为 ...
- 文件同步 单向rsync 双向unison 监控inotifywait 免密登录
1.负载均衡中文件同步必不可少,我这边选择rsync来实现文件同步 rsync同步文件机制更适用于单向文件同步,可配合unison实现双向同步功能. 实现同步的两种方法 一:ssh方法 rsync - ...
- 学会了vim中的自动补全功能
好开心,再也不用再多个工具之间切换了,哈哈 擦,功能太弱
- Android性能优化来龙去脉总结
WeTest 导读 一款app除了要有令人惊叹的功能和令人发指交互之外,在性能上也应该追求丝滑的要求,这样才能更好地提高用户体验. 以下是本人在工作中对经历过的性能优化的一些总结,依据故事的发展路线, ...
- Unity制作人物头像小图标和小地图
人物头像的制作: 在场景中添加人物模型和环境模型 设置人物的layer为Player 在主摄像机的基础上,新建一个次摄像机并将摄像机镜头对准人物面部,调整至合适大小. 设置次摄像机 culling m ...
- python 终极篇 --- form组件 与 modelForm
form组件 ...
- tomcat下载、安装
下载 官网地址:https://tomcat.apache.org/download-80.cgi 安装 直接安装即可.安装完毕后Tomcat的目录结构如下: bin:脚本目录 启动脚本:star ...
- Paper Reading - Learning to Evaluate Image Captioning ( CVPR 2018 ) ★
Link of the Paper: https://arxiv.org/abs/1806.06422 Innovations: The authors propose a novel learnin ...