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 ...
随机推荐
- 树莓派-基于aria2实现离线下载
安装aria2 aria2是linux下的一个下载工具,它支持http.bt种子.磁力链接三种方式下载 sudo apt-get install aria2 配置aria2 aria2支持命令参数,也 ...
- Java 系列之spring学习--spring搭建(一)
一.新建maven项目 二.引入spring jar包 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xs ...
- golang new和make的区别
自:http://www.cnblogs.com/ghj1976/archive/2013/02/12/2910384.html make用于内建类型(map.slice 和channel)的内存分配 ...
- Jquery- scrollTop()一个问题:
在使用jquery的scrollTop()方法获取滚动条的位置时,发现变量名为top会有影响,代码: <!doctype html> <html> <head> & ...
- JS 封装一个显示时间的函数
s(); function s (){ var mydate=new Date(); var y = mydate.getFullYear(); var m = mydate.getMonth(); ...
- 洛谷P1486 [NOI2004]郁闷的出纳员
Code: #include<cstdio> #include<algorithm> using namespace std; struct Node{ int s,val,t ...
- 序列模型(4)----门控循环单元(GRU)
一.GRU 其中, rt表示重置门,zt表示更新门. 重置门决定是否将之前的状态忘记.(作用相当于合并了 LSTM 中的遗忘门和传入门) 当rt趋于0的时候,前一个时刻的状态信息ht−1会被忘掉,隐藏 ...
- IOS - NSDate 自己挖的坑,自己跳
NSDate:5是坑啊啊! NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDat ...
- Project Euler 27 Quadratic primes( 米勒测试 + 推导性质 )
题意: 欧拉发现了这个著名的二次多项式: f(n) = n2 + n + 41 对于连续的整数n从0到39,这个二次多项式生成了40个素数.然而,当n = 40时402 + 40 + 41 = 40( ...
- EL表达式取整问题
一般来说我们是无法实现EL表达式取整的.对于EL表达式的除法而言,他的结果是浮点型. 如:${6/7},他的结果是:0.8571428571428571.对于这个我们是无法直接来实现取整的. 这时就可 ...