清澄A1223. 画圈圈(范浩强)
头一次独自完成插头DP的题,发博客庆祝一下。
(不过我居然因为忘记取模错了一次)
发现n,m都很小,可以用插头DP。
可以把点看作格子。
用一个变量zt来记录当前位置在回路内部还是外部,便于思考。如果格子左边有一个横向的插头,那么用它左上角判断位置。不过这个不影响答案。
具体细节看代码。
#include<cstdio>#include<iostream>using namespace std;const int md=123456791;int n,m;char s[40][20];struct node{int val,zt;}q1[1<<15],q2[1<<15];int dp1[1<<15],dp2[1<<15];node *p=q1,*q=q2;int *dp=dp1,*dq=dp2;int num1,num2;int a[40];void printa(){for(int i=0;i<=m;i++)printf("%d",a[i]);printf("\n");}void turn_out(int val){for(int i=0;i<=m;i++){a[i]=val&1;val>>=1;}} int turn_in(){int val=0;for(int i=m;i>=0;i--){val<<=1;val+=a[i];}return val;}void shift(){for(int i=m;i>=1;i--)a[i]=a[i-1];a[0]=0;}void push_in(node st,int val){ if(!dq[st.val]) q[++num2]=st;(dq[st.val]+=dp[val])%=md;}void dp_block(int k,node st){turn_out(st.val);if(k==1) shift();int val,zt;if(a[k-1]&&a[k]){a[k-1]=0,a[k]=0;val=turn_in(),zt=st.zt^1;push_in((node){val,zt},st.val);return;}else if(a[k-1]&&!a[k]){if(k<m){a[k-1]=0,a[k]=1;val=turn_in(),zt=st.zt;push_in((node){val,zt},st.val);}a[k-1]=1,a[k]=0;val=turn_in(),zt=st.zt;push_in((node){val,zt},st.val);return;}else if(!a[k-1]&&a[k]){a[k-1]=1,a[k]=0;val=turn_in(),zt=st.zt^1;push_in((node){val,zt},st.val);if(k<m){a[k-1]=0,a[k]=1;val=turn_in(),zt=st.zt^1;push_in((node){val,zt},st.val);}return;}else if(!a[k-1]&&!a[k]){if(k<m){a[k-1]=1,a[k]=1;val=turn_in(),zt=st.zt;push_in((node){val,zt},st.val);}return;}}void dp_in(int k,node st){turn_out(st.val);if(k==1) shift();int val,zt;if(!a[k-1]&&!a[k]&&st.zt==1){val=turn_in(),zt=st.zt;push_in((node){val,zt},st.val);}}void dp_out(int k,node st){turn_out(st.val);if(k==1) shift();int val,zt;if(!a[k-1]&&!a[k]&&st.zt==0){val=turn_in(),zt=st.zt;push_in((node){val,zt},st.val);}}int main(){// freopen("A1223.in","r",stdin);scanf("%d%d",&n,&m);for(int i=1;i<=n;i++)scanf("%s",s[i]+1);num1=1,num2=0;p[num1]=(node){0,0};dp[0]=1;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){for(int k=1;k<=num1;k++){if(s[i][j]=='.') dp_block(j,p[k]);else if(s[i][j]=='*') dp_in(j,p[k]);else if(s[i][j]=='#') dp_out(j,p[k]);dp[p[k].val]=0;}swap(dp,dq);swap(p,q);num1=num2,num2=0;}}printf("%d\n",dp[0]);return 0;}
清澄A1223. 画圈圈(范浩强)相关推荐
- c语言谭浩强ppt课件,编程_C语言学习课件_谭浩强_PPT~1216F.ppt
编程_C语言学习课件_谭浩强_PPT~1216F.ppt ,第一章,C语言概述本章要点,C语言的特点 C程序的结构 在计算机上运行C程序的方法主要内容,1.1 语言出现的历史背景 1.2 程序的特点 ...
- 《C语言程序设计》(谭浩强第五版) 第2章 算法——程序的灵魂
<C语言程序设计>(谭浩强第五版) 第2章 算法--程序的灵魂 习题解析与答案 你也可以上程序咖(https://meta.chengxuka.com),打开大学幕题板块,不但有答案,讲解 ...
- C语言程序设计第五版 谭浩强 第四章 课后习题 答案
谭浩强C语言程序设计第五版 第4章 课后习题 答案 点我看视频讲解+可运行源码 记得一键三连哦 第四章 选择结构程序设计 1. 什么是算术运算?什么是关系运算?什么是逻辑运算? [答案解析] 算熟运算 ...
- 漫画:狼厂校招面试题(面试官说要和我画圈圈...)
今天是小浩算法"365刷题计划"第78天.这次小浩又出去面试了,面试官说想和我画圈圈(原题为狼厂校招面试题),想起来还有点羞羞的. 01 PART 画圈圈 !@#¥%--& ...
- 谭浩强《C++程序设计》书后习题 第十三章-第十四章
2019独角兽企业重金招聘Python工程师标准>>> 最近要复习一下C和C++的基础知识,于是计划把之前学过的谭浩强的<C程序设计>和<C++程序设计>习题 ...
- 谭浩强《C++程序设计》学习
谭浩强<C++程序设计>学习 zdh1995 2017-10-12 15:54:56 5613 收藏 251 文章标签: c++ 版权 C++ 不要把面向对象和基于过程对立起来,面向对 ...
- 谭浩强c语言第六章兔子数列,谭浩强 C语言 第6章_循环.ppt
谭浩强 C语言 第6章_循环 第六章 本章要点 循环的基本概念 不同形式的循环控制 多重循环问题 主要内容 6.1 概述 6.2 goto语句以及用goto语句构成循环 6.3 用while语句实现循 ...
- 学习谭浩强老师的《C程序设计》,必配《C程序设计伴侣》!
<C程序设计伴侣>作者陈良乔:"更有趣.更容易.更深刻.更实战的<C程序设计伴侣>--<C程序设计>的有力补充和最佳伴侣.在中国,几乎每一个人,第一次接触 ...
- c++程序设计梳理(谭浩强)3-4章
为什么80%的码农都做不了架构师?>>> 同学拿了58的offer,22万一年,内心多少有点不是滋味.自己享受着这么丁点的中兴薪酬,明显是学业不精的那一类.事实确实如此,可当现 ...
- 转:中国学生为什么学不好计算机 谭浩强
谭浩强教授是国内知名的计算机教育推进者,同时他也是国内知名的计算机教材编写者.谭教授所著<Basic语言教程>一书的销量达到了一千两百万,创下了同类教材销售的吉尼斯世界纪录.当谭教授谈起国 ...
最新文章
- 华为鸿蒙系统强势来袭,呼之欲出的华为神作——鸿蒙2.0 强势来袭
- 第二百九十二节,RabbitMQ多设备消息队列-Python开发
- KVC/KVO 本质
- 西点军校邀马云谈领导力:要为年轻人和未来做决策_演讲
- php post请求后端拿不到值_Ajax 提交POST后,后台php 无法获取$POST值
- Java常用性能分析工具 jconsole、jvisualvm、 jstat、jinfo、jmap、jhat、jstack
- bzoj2438 luogu4819 [中山市选]杀人游戏
- 清北学堂模拟day4 捡金币
- JNDI配置数据库连接
- lenovo L480 进入bios_小白福利教程:如何刷显卡BIOS以及强刷显卡BIOS(一)
- Instant及LocalDateTime等使用方法
- pdf文件如何在安卓手机端不用下载在线预览
- 垃圾分类回收APP开发解决方案
- Android 拍照添加时间水印
- 如何用uni-app做一个领优惠券H5、小程序商城(一)
- 建立区域经济大脑,驱动产业创新发展
- 北大青鸟毕业的程序员该何去何从
- 面试之必掌握知识点:红黑树(一)
- 二十三 HDP搭建大数据环境
- 域控中将计算机账户移动到特定OU下
热门文章
- H264/AVC-基本概念和码流结构
- ui自动化html模板,webui 自动化 (utx+unitest+HTMLTestRunner_cn)
- AI数据服务行业进入“认知战争”,云测数据凭什么稳居行业TOP1?
- 2019腾讯广告算法大赛解析
- Python 批量合并 Excel工作簿
- 资源池以及资源池化是什么意思?
- 亲手养成一只自己的动漫主播!单张头像生成动画,可指定姿态或真人视频迁移...
- 怎样更改itunes备份位置_iTunes备份路径怎么改?教你无脑修改iPhone备份文件路径...
- As of Dart Sass 2.0.0 弃用 除法符号“/” element-ui自定义皮肤样式报错,但能运行
- linux系统怎么清理磁盘空间,分享5个如何给Ubuntu系统清理磁盘空间、清除垃圾的方法...