震惊!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. 为什么用Mysql?

    阅读目录 楔子 初识数据库 为什么要用数据库 认识数据库 初识mysql mysql概念 下载和安装 初识sql语句 楔子 假设现在你已经是某大型互联网公司的高级程序员,让你写一个火车票购票系统,来h ...

  2. 组合模式(composite)C++实现

    组合模式 意图: 将对象组合成树形结构以表示‘部分-整体’的层次结构,所以有时候又叫做部分-整体模式.组合模式使得用户对单个对象和组合对象的使用具有一致性.,它使我们树型结构的问题中,模糊了简单元素和 ...

  3. 【Oracle】闪回技术

    1.闪回技术描述 2.数据库的准备: --undo表空间要设置成AUTO,设置合适的保存时间.undo表空间: SYS@ENMOEDU> show parameter undo NAME TYP ...

  4. C# 学习笔记1 _ 学习要点

    程序开始 MainConsole.WriteLine(“换行”);Console.Write(“不换行”);Console.ReadKey();   等待用户从键盘上键入一个键.Console.Cle ...

  5. DDoS攻击与防范策略

    DDoS(Distributed Denial of Service,分布式拒绝服务)攻击的主要目的是让指定目标无法提供正常服务,甚至从互联网上消失,是目前最强大.最难防御的攻击之一. 按照发起的方式 ...

  6. oc懒加载 & swift lazy

    oc的懒加载依赖于属性的双重属性的函数属性部分. 懒加载的本质是执行get函数. swift的lazy,理论上与此类似. 编译器优化时可能对初始化块进行了保存. 懒加载的本质是延迟执行. 只要是执行, ...

  7. 优动漫PAINT(clip studio paint)提示无法连接服务器

    很多同学在使用优动漫PAINT进行艺术创作的时候,软件会出现无法连接服务器的提示,遇到此情况如何解决呢?目前,软件在Windows系统和Mac系统上的解决方法有别,请悉知: 1.曾使用过,或正在使用F ...

  8. 【JavaScript框架封装】实现一个类似于JQuery的DOM框架的封装

    // DOM框架(选择器框架) (function (xframe) { // 需要参与链式访问的(必须使用prototype的方式来给对象扩充方法) xframe.extend({ /** * 向现 ...

  9. vue项目使用简略总结

    1.利用iView Cli搭建项目结构2.搭建完毕之后将proxy.js和'Server.js'放置到node_modules\webpack-dev-server\lib目录下,以实现跨域访问公司平 ...

  10. 《黑白团团队》第八次团队作业:Alpha冲刺 第五天

    项目 内容 作业课程地址 任课教师首页链接 作业要求 团队项目 填写团队名称 黑白团团队 填写具体目标 认真负责,完成项目 团队项目Github仓库地址链接. 第五天 日期:2019/6/19 成员 ...