ural1519
题解:
插头dp
具体可以看看cdq论文
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=;
int n,m,ex,ey;
char s[][];
struct node
{
int H[N],tot,st[N];
ll s[N];
void init()
{
memset(H,,sizeof(H));
tot=;
}
void add(int S,ll v)
{
int i=S%N;
for (;H[i]>=&&st[H[i]]!=S;i=(i+)%N);
if (H[i]<)
{
st[tot]=S;
s[tot]=v;
H[i]=tot++;
}
else s[H[i]]+=v;
}
}f[];
int Get(int x,int y)
{
return (x>>(y<<))&;
}
int Set(int &z,int x,int y)
{
z^=Get(z,x)<<(x<<);
z^=y<<(x<<);
}
int main()
{
scanf("%d%d",&n,&m);
for (int i=;i<n;i++)
{
scanf("%s",s[i]);
for (int j=;j<m;j++)
if (s[i][j]=='.')
{
ex=i;
ey=j;
}
}
int p=,q=;
f[p].s[]=; f[p].tot=;
for (int i=;i<n;i++)
{
for (int j=;j<m;j++,p^=,q^=)
{
f[q].init();
if (s[i][j]=='*')
{
for (int k=;k<f[p].tot;k++)
{
int st=f[p].st[k];
ll s=f[p].s[k];
if (!Get(st,j)&&!Get(st,j+))f[q].add(st,s);
}
continue;
}
for (int k=;k<f[p].tot;k++)
{
int st=f[p].st[k],x=Get(st,j),y=Get(st,j+);
ll s=f[p].s[k];
if (!x)
{
if (!y)
{
if (j==m-) continue;
Set(st,j,); Set(st,j+,);
f[q].add(st,s);
}
else
{
if (j<m-) f[q].add(st,s);
Set(st,j+,); Set(st,j,y);
f[q].add(st,s);
}
}
else if (!y)
{
f[q].add(st,s);
if (j==m-) continue;
Set(st,j,); Set(st,j+,x);
f[q].add(st,s);
}
else
{
Set(st,j,); Set(st,j+,);
if (x==)
{
if (y==)
{
for (int k=j+,t=;;k++)
{
if (Get(st,k)==) t++;
else if (Get(st,k)==)
{
t--;
if (!t)
{
Set(st,k,);
f[q].add(st,s);
break;
}
}
}
}
else if (i==ex && j==ey) f[q].add(st,s);
}
else
{
if (y==) f[q].add(st,s);else
{
for (int k=j-,t=;;k--)
{
if (Get(st,k)==) t++;
else if (Get(st,k)==)
{
t--;
if (!t)
{
Set(st,k,);
f[q].add(st,s);
break;
}
}
}
}
}
}
}
}
for (int j=;j<f[p].tot;j++) f[p].st[j]<<=;
}
for (int i=;i<f[p].tot;i++)
if (f[p].st[i]==)
{
printf("%lld\n",f[p].s[i]);
return ;
}
puts("");
return ;
}
ural1519的更多相关文章
- URAL1519:Formula 1——题解
http://acm.timus.ru/problem.aspx?space=1&num=1519 https://vjudge.net/problem/URAL-1519 题目大意:给一个网 ...
- URAL1519 Formula 1 【插头dp】
题目链接 URAL1519 题解 看题型显然插头\(dp\) 考虑如何设计状态 有这样一个方案 当我们决策到某个位置 轮廓线长这样 你会发现插头一定是相互匹配的 所以我们实际上可以把状态用括号序列表示 ...
- URAL1519 Formula 1 —— 插头DP
题目链接:https://vjudge.net/problem/URAL-1519 1519. Formula 1 Time limit: 1.0 secondMemory limit: 64 MB ...
- ural1519插头DP
1519. Formula 1 Time limit: 1.0 second Memory limit: 64 MB Background Regardless of the fact, that V ...
- 2019.01.23 ural1519 Formula 1(轮廓线dp)
传送门 轮廓线dpdpdp模板题. 题意简述:给一个放有障碍的网格图,问有多少种方法能使所有非障碍格子都在同一条哈密顿回路上面. 考虑用括号序列的写法来状压这个轮廓线. 用000表示没有插头,111表 ...
- [URAL1519] Formula 1 [插头dp入门]
题面: 传送门 思路: 插头dp基础教程 先理解一下题意:实际上就是要你求这个棋盘中的哈密顿回路个数,障碍不能走 看到这个数据范围,还有回路处理,就想到使用插头dp来做了 观察一下发现,这道题因为都是 ...
- POJ 1739
楼教主男人八题之一... 题目大意: 求从左下角经过所有非障碍点一次到达右下角的方案数 这里不是求回路,但是我们可以考虑,在最下面一行再增加一行,那么就可以当做求此时左下角到右下角的回路总数,那么就转 ...
- HDU 1693 二进制表示的简单插头dp
题目大意: 找到多条回路覆盖所有非障碍格子,问这样回路的种数 这里的插头与URAL1519 不一样的是 只要管它是否存在即可,只需要1个二进制位表示状态 #include <cstdio> ...
- 插头dp的几个模板
/* ural1519 求经过全部可行点的哈密顿回路的个数 括号匹配法,转移有点复杂,可是时间空间比較小 */ #include<cstdio> #include<cstring&g ...
随机推荐
- 关于JS历史
js由来 95年那时,绝大多数因特网用户都使用速度仅为28.8kbit/s 的“猫”(调制解调器)上网,但网页的大小和复杂性却不断增加.为完成简单的表单验证而频繁地与服务器交换数据只 ...
- (6)进程---Event事件
# 阻塞事件 : e = Event()生成事件对象e e.wait()是给程序加阻塞 , 程序当中是否加阻塞完全取决于该对象中的is_set() [默认返回值是False] e.wait(2) 传参 ...
- ssh repo ----> struts+hibernate+spring( jar包和源码)各版本下载链接
struts http://archive.apache.org/dist/struts/ hibernate http://hibernate.org/orm/releases/5.0/ sprin ...
- 微信小程序如何导入字体图标
前提:我们已经拥有了从阿里图标库下载下来的一系列的字体图标文件1:找个其中的ttf格式的文件,然后打开https://transfonter.org/网站2:点击Add fonts按钮,加载ttf格式 ...
- JS实现继承的6种方式
使用pretotype,call实现完美继承 父类: fuction Animal(name){ this.name=name||"Animal"; this.sl ...
- Stark组件 (一)
Stark组件构建 1.启动所有app下的stark.py文件,的配置实现步骤 1.创建一个Django项目crm,并创建 app1 ,app2, stark 三个app 2.在crm 项目的set ...
- CF1129C Morse Code
pro: 维护一个01字符串,支持在结尾动态加字符. 每一个长度<=4的01串可以对应一个字母(有几个特例除外) 每次操作后询问,这个字符串的所有子串一共可以对应出多少种本质不同的字符串. so ...
- 非常可乐 HDU - 1495
大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为.因为每次当seeyou买了可乐以后,阿牛就要求和seeyou一起分享这一瓶可乐,而且一定要喝的和seeyou一样多.但see ...
- 05 爬虫之scrapy
一 scrapy框架简介 01 什么是scrapy: Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,非常出名,非常强悍.所谓的框架就是一个已经被集成了各种功能(高性能异步下载,队 ...
- Object.keys的使用
链接:https://www.nowcoder.com/questionTerminal/52c41b84e32a4158883cb112a1d1f850来源:牛客网 输出对象中值大于2的key的数组 ...