caioj1497&&bzoj3125: CITY
震惊!bzoj居然又被苏大佬D飞了。。。
这题煞笔模板题好吧。
然而bzojAC caiojWA%40??? 好强啊
今天早上发现是m打成n了囧
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long LL;
const LL mod=; int n,m,edx,edy;LL ans;
int mp[][];
struct Plug
{
LL f[];
int top;LL sta[],hash[];
void pha(LL s,LL sum)
{
LL x=s%mod;
while(hash[x]!=&&sta[hash[x]]!=s)x=(x+)%mod;
if(hash[x]==)sta[++top]=s,hash[x]=top;
f[hash[x]]+=sum;
}
void clean()
{
top=;
memset(f,,sizeof(f));
memset(hash,,sizeof(hash));
}
}dp[];
LL get_bracket(LL s,LL p)
{
return (s>>(p-)*)&;
}
LL set_bracket(LL s,LL p,LL v)
{
s^=(get_bracket(s,p)<<((p-)*));
s^=(v<<((p-)*));
return s;
}
int pre,now;
void Plug_DP()
{
pre=;now=;
dp[now].clean();dp[now].pha(,);
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
swap(pre,now);dp[now].clean();
for(int k=;k<=dp[pre].top;k++)
{
LL s=dp[pre].sta[k],sum=dp[pre].f[k];
LL p=get_bracket(s,j),q=get_bracket(s,j+);
if(mp[i][j]==)
{
if(p==&&q==)
dp[now].pha(s,sum);
}
else if(mp[i][j]==)
{
if(p==&&q==)
{
if(mp[i+][j]>&&mp[i][j+]>)
{
s=set_bracket(s,j,);
s=set_bracket(s,j+,);
dp[now].pha(s,sum);
}
}
else if(p>&&q==)
{
if(mp[i+][j]>)
{
s=set_bracket(s,j,p);
s=set_bracket(s,j+,);
dp[now].pha(s,sum);
}
if(mp[i][j+]>)
{
s=set_bracket(s,j,);
s=set_bracket(s,j+,p);
dp[now].pha(s,sum);
}
}
else if(p==&&q>)
{
if(mp[i+][j]>)
{
s=set_bracket(s,j,q);
s=set_bracket(s,j+,);
dp[now].pha(s,sum);
}
if(mp[i][j+]>)
{
s=set_bracket(s,j,);
s=set_bracket(s,j+,q);
dp[now].pha(s,sum);
}
}
else if(p==&&q==)
{
if(i==edx&&j==edy)ans+=sum;
}
else if(p==&&q==)
{
s=set_bracket(s,j,);
s=set_bracket(s,j+,);
dp[now].pha(s,sum);
}
else if(p==&&q==)
{
int fd=;
for(int v=j+;v<=m;v++)
{
int bck=get_bracket(s,v);
if(bck==)fd++;
if(bck==)fd--;
if(fd==)
{
s=set_bracket(s,j,);
s=set_bracket(s,j+,);
s=set_bracket(s,v,);
dp[now].pha(s,sum);
break;
}
}
}
else if(p==&&q==)
{
int fd=;
for(int v=j-;v>=;v--)
{
int bck=get_bracket(s,v);
if(bck==)fd++;
if(bck==)fd--;
if(fd==)
{
s=set_bracket(s,j,);
s=set_bracket(s,j+,);
s=set_bracket(s,v,);
dp[now].pha(s,sum);
break;
}
}
}
}
else if(mp[i][j]==)
{
if(p==&&q>)
{
if(mp[i+][j]>)
{
s=set_bracket(s,j,q);
s=set_bracket(s,j+,);
dp[now].pha(s,sum);
}
}
}
else if(mp[i][j]==)
{
if(p>&&q==)
{
if(mp[i][j+]>)
{
s=set_bracket(s,j,);
s=set_bracket(s,j+,p);
dp[now].pha(s,sum);
}
}
}
}
}
for(int k=;k<=dp[now].top;k++)
dp[now].sta[k]<<=;
}
}
char ss[];
int main()
{
scanf("%d%d",&n,&m);
memset(mp,,sizeof(mp));
for(int i=;i<=n;i++)
{
scanf("%s",ss+);
for(int j=;j<=m;j++)
{
if(ss[j]=='.')mp[i][j]=;
else if(ss[j]=='|')mp[i][j]=;
else if(ss[j]=='-')mp[i][j]=;
if(ss[j]!='#')edx=i,edy=j;
}
}
ans=;Plug_DP();
printf("%lld\n",ans);
return ;
}
caioj1497&&bzoj3125: CITY的更多相关文章
- bzoj3125: CITY 题解
3125: CITY Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 486 Solved: 213[Submit][Status][Discuss] ...
- 2019.01.24 bzoj3125: CITY(轮廓线dp)
传送门 题意简述:给一个n∗mn*mn∗m的网格图,有的格子不能走,有的格子只能竖着走,有的格子只能横着走,问用一条回路覆盖所有能走的格子的方案数. 思路: 就是简单的轮廓线dpdpdp加了一点限制而 ...
- 插头dp题表
bzoj1814: Ural 1519 Formula 1 bzoj3125: CITY bzoj1210: [HNOI2004]邮递员 bzoj2331: [SCOI2011]地板 bzoj1187 ...
- 【bzoj3125】CITY 插头dp
题目描述 给出一个n*m的矩阵,某些格子不能通过,某些格子只能上下通过或左右通过.求经过所有非不能通过格子的哈密顿回路条数. 输入 第一行有两个数N, M表示地图被分割成N*M个块,接下来有N行,每行 ...
- BZOJ 2001: [Hnoi2010]City 城市建设
2001: [Hnoi2010]City 城市建设 Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 1132 Solved: 555[Submit][ ...
- History lives on in this distinguished Polish city II 2017/1/5
原文 Some fresh air After your time underground,you can return to ground level or maybe even a little ...
- History lives on in this distinguished Polish city 2017/1/4
原文 History lives on in this distinguished Polish city Though it may be ancient. KraKow, Poland, is a ...
- #1094 : Lost in the City
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Little Hi gets lost in the city. He does not know where he is ...
- GeoIP Legacy City数据库安装说明
Here is a brief outline of the steps needed to install GeoIP Legacy City on Linux/Unix. The installa ...
随机推荐
- Three.js入门——画星空(star field)
Three.js是一个很流行的3D JavaScript库.这里有一个three.js的入门教程,在浏览器窗口中画出星空.我按照教程重新实现了一遍,这里的这篇博客把教程大致翻译了一遍.我的demo. ...
- JavaScript的并且&&
<html> <head> <meta charset="utf-8"> <title>无标题文档</title> &l ...
- Service、chkconfig命令
转自:http://my.oschina.net/phptiger86/blog/137656
- boost的单例模式
template <typename T> struct singleton_default { private: struct object_creator { ...
- OpenStack、KVM、Docker——Docker之后还需要OpenStack吗?
原文链接:http://news.csdn.net/article_preview.html?preview=1&reload=1&arcid=2823129 Docker从一个新兴的 ...
- HTML5中新增加Input 的种类
查询文本框 <input type="search"> 数字文本框 any 代表不设置 <input type="number" max=&q ...
- JavaScript回顾一下js的基础知识,以及学习一下在项目中了解到的新知识
学习文档:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Functions https://www.cnblogs.com ...
- jQuery 父级,祖先,兄弟,等选择性操作
jQuery.parent(expr) 找父亲节点,可以传入expr进行过滤,比如$("span").parent()或者$("span").parent(&q ...
- required输入框为必填项
required <input type="text" placeholder="cat photo URL" required>
- 如何把数值或者对象添加到ArrayList集合
生成6个1~33之间的随机整数,添加到集合,并遍历 public class ArrayListDemo1 { public static void main(String[] args) { // ...