震惊!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的更多相关文章

  1. bzoj3125: CITY 题解

    3125: CITY Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 486  Solved: 213[Submit][Status][Discuss] ...

  2. 2019.01.24 bzoj3125: CITY(轮廓线dp)

    传送门 题意简述:给一个n∗mn*mn∗m的网格图,有的格子不能走,有的格子只能竖着走,有的格子只能横着走,问用一条回路覆盖所有能走的格子的方案数. 思路: 就是简单的轮廓线dpdpdp加了一点限制而 ...

  3. 插头dp题表

    bzoj1814: Ural 1519 Formula 1 bzoj3125: CITY bzoj1210: [HNOI2004]邮递员 bzoj2331: [SCOI2011]地板 bzoj1187 ...

  4. 【bzoj3125】CITY 插头dp

    题目描述 给出一个n*m的矩阵,某些格子不能通过,某些格子只能上下通过或左右通过.求经过所有非不能通过格子的哈密顿回路条数. 输入 第一行有两个数N, M表示地图被分割成N*M个块,接下来有N行,每行 ...

  5. BZOJ 2001: [Hnoi2010]City 城市建设

    2001: [Hnoi2010]City 城市建设 Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 1132  Solved: 555[Submit][ ...

  6. 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 ...

  7. 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 ...

  8. #1094 : Lost in the City

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Little Hi gets lost in the city. He does not know where he is ...

  9. GeoIP Legacy City数据库安装说明

    Here is a brief outline of the steps needed to install GeoIP Legacy City on Linux/Unix. The installa ...

随机推荐

  1. 在量化金融中15个最流行的Python数据分析库

    Python是当今应用最广泛的编程语言之一,以其效率和代码可读性著称.作为一个科学数据的编程语言,Python介于R和java之间,前者主要集中在数据分析和可视化,而后者主要应用于大型应用.这种灵活性 ...

  2. arttemplate.js原生写法案例

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  3. 移动端H5 判断IOS还是Android 平台

    1.方法 (function($) { var UA = window.navigator.userAgent; if(/Android|HTC/i.test(UA) || !!(window.nav ...

  4. 三维重建:深度相机方案对比-KinectFusion的基本原理(尺度)

    算法原理请参考此文:  kinect fusion 3D重建基本算法  http://log.csdn.net/xiaohu50/article/details/51592503 三维重建为三维空间实 ...

  5. vc++如何创建程序-构造函数02

    1.若忘记了赋值,出现运行结果是很大的负值(因为我们定义的x与y这两个成员变量存储在内存中是一个随机的值) 当我们调用时,随机输出. //包含输入输出的头文件#include<iostream. ...

  6. hibernate一对多和多对一配置

    public class Dept { private int deptId; private String deptName; // [一对多] 部门对应的多个员工 private Set<E ...

  7. keepalived+mysql主主实现高可用

    mysql主从配置参考我的上篇博客 主主配置就是互为主从 环境 准备应用 keepalived-2.0.2.tar.gz openssl-devel-1.0.2k-12.el7.x86_64.rpm ...

  8. JavaScript:进制转换。

    最近做了一些进制的转换的点. 十进制转二进制: let a = 45; a.toString(2); //"101101" let b = 123; b.toString(2); ...

  9. [luogu4310] 绝世好题 (递推)

    传送门 题目描述 给定一个长度为n的数列ai,求ai的子序列bi的最长长度,满足bi&bi-1!=0(2<=i<=len). 输入输出格式 输入格式: 输入文件共2行. 第一行包括 ...

  10. OSI层次介绍

    1.应用层:为应用软件提供接口,使应用程序能够使用网络服务. 2.表示层:①数据的解码和编码,②数据的加密和解密,③数据的压缩和解压缩. 3.会话层:建立.维护.管理应用程序之间的会话. 功能:对话控 ...