2331: [SCOI2011]地板

2024-03-02 21:48
文章标签 2331 地板 scoi2011

本文主要是介绍2331: [SCOI2011]地板,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

插头Dp

/**************************************************************Problem: 2331User: sxb_201Language: C++Result: AcceptedTime:980 msMemory:43148 kb
****************************************************************/#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
#define MO 20110520
int ans[5000000];
int f[700000],top;
int n,m;
char s[200][200];
bool ok(int x)
{for(int i=0;i<=m+1;i++){if( (x & (3<<(i*2)) )  ==(3<<(i*2))) return false;}return true;
}
int F(int x,int now,int up,int left)
{int tmp=(x>>(now*2))%4;tmp^=up;x^=( tmp<<(now*2) );x>>=2;x<<=2;x^=left;return x;
}
char a[200][200];
int g[5000000];
int main()
{cin >>n >>m;for(int i=1;i<=n;i++)scanf("%s",s[i]+1);if(n>=m)for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)a[i][j]=s[i][j];else{swap(n,m);for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)a[i][j]=s[j][i];}for(int i=0;i< (1<<((m+1)*2));i++){if(ok(i)) f[++top]=i;}ans[0]=1;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++)if(a[i][j]!='*'){for(int k=1;k<=top;k++)g[f[k]]=0; for(int k=1;k<=top;k++){int tmp=f[k];if(ans[tmp]==0) continue;int left=tmp%4;int up=  ( tmp>>( j*2) )%4;int to; if(up==0&&left==0){to=F(tmp,j,0,2);g[to]=(g[to]+ans[tmp])%MO;to=F(tmp,j,2,0);g[to]=(g[to]+ans[tmp])%MO;to=F(tmp,j,1,1);g[to]=(g[to]+ans[tmp])%MO;}if(up==0&&left==1){to=F(tmp,j,0,0);g[to]=(g[to]+ans[tmp])%MO;to=F(tmp,j,0,1);g[to]=(g[to]+ans[tmp])%MO;}if(up==0&&left==2){to=F(tmp,j,0,2);g[to]=(g[to]+ans[tmp])%MO;to=F(tmp,j,1,0);g[to]=(g[to]+ans[tmp])%MO;}if(up==1&&left==0){to=F(tmp,j,0,0);g[to]=(g[to]+ans[tmp])%MO;to=F(tmp,j,1,0);g[to]=(g[to]+ans[tmp])%MO;          }if(up==1&&left==1){}if(up==1&&left==2){}if(up==2&&left==0){to=F(tmp,j,0,1);g[to]=(g[to]+ans[tmp])%MO;to=F(tmp,j,2,0);g[to]=(g[to]+ans[tmp])%MO;}if(up==2&&left==1){}if(up==2&&left==2){to=F(tmp,j,0,0);g[to]=(g[to]+ans[tmp])%MO;}   }//  memset(ans,0,sizeof(ans));for(int k=1;k<=top;k++)ans[f[k]]=g[f[k]];}else{for(int k=1;k<=top;k++)if(f[k]%4!=0||((f[k]>>(j*2))%4!=0))ans[f[k]]=0;}for(int k=1;k<=top;k++)if(f[k]%4!=0)ans[f[k]]=0;}cout<<ans[0]<<endl;return 0;
}


这篇关于2331: [SCOI2011]地板的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/767522

相关文章

前向纠错码的地板效应

前向纠错码(FEC,Forward Error Correction)的地板效应,主要指的是在某些情况下,即使信噪比(SNR)显著提高,比特错误率(BER)或帧错误率(FER)的下降速度却变得非常缓慢,甚至趋于一个非零的常数水平,这个现象就被形象地称为“地板效应”。以下是关于前向纠错码地板效应的几个关键点: 1. 地板效应的定义与表现 定义:地板效应是指在高信噪比区域,FEC的纠错性能不再随信

全钢无边防静电地板结构特点你了解多少

机房装修常常会用到防静电地板,全钢无边防静电地板作为其中一种,常用于对地板外观要求较高,且不需要频繁更换设备的场所,那么全钢无边防静电地板有哪些特点呢? 先来说一下全钢无边防静电地板的结构:全钢无边防静电地板采用合金冷轧钢板,经拉伸后点焊成形。外表经磷化后进行喷塑处理,内腔填充发泡填料,上表面粘贴高耐磨防火高压层板(HPL)或PVC板,与传统全钢防静电地板不同的是无边防静电地板四周没有镶嵌黑色导

稀土阻燃协效剂在木质地板中的应用

木质地板作为一种天然材料,非常容易燃烧,因此需要采取措施来增强其阻燃性能。稀土阻燃协效剂基于稀土4f电子层结构带来的特有属性,在聚合物材料燃烧时可催化酯化成炭,迅速在高分子表面形成致密连续的碳层,隔绝聚合物材料内部的可燃性气体与氧气的接触,从而达到阻燃抑烟的效果,且燃烧时不产生有毒有害气体。 以下是稀土阻燃协效剂在木质地板上的具体应用及其优势: 1. 阻燃性能提升:加入稀土阻

架空防静电地板的贴面面层有哪些

很多机房装修都会用到架空防静电地板,架空防静电地板由贴面、基材、支架横梁系统组成,那么架空防静电地板的贴面都有哪些呢?一起来看看~ 防静电地板常用贴面面层有3种: 1、PVC防静电贴面面层;2、HPL防静电贴面面层;3、瓷砖防静电贴面面层 1、PVC防静电贴面面层 防静电PVC贴面是一种采用聚氯乙烯材料制成的地板贴面。材料轻便,方便安装,价格相对便宜,普通机房用的较多。一般有1mm和2m

LeetCode|2331. Evaluate Boolean Binary Tree

. 题目 You are given the root of a full binary tree with the following properties: Leaf nodes have either the value 0 or 1, where 0 represents False and 1 represents True. Non-leaf nodes have eithe

BZOJ 2330 [SCOI2011]糖果 差分约束

Description 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果。但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比他的多,于是在分配糖果的时候,lxhgww需要满足小朋友们的K个要求。幼儿园的糖果总是有限的,lxhgww想知道他至少需要准备多少个糖果,才能使得每个小朋友都能够分到糖果,并且满足小朋友们所有的要求

ASTM D7032-21 木塑地板、踏板、围栏和扶手检测

木塑复合材料是国内外近年兴起的一类新型复合材料,由聚乙烯,聚丙烯,聚氯乙烯,木粉,稻壳,秸秆等材料经过挤压,模压,注塑等成型工艺而生产出来的板材或者型材。主要用于地板,家居,楼梯,围栏,扶手等场所,在国内外被广泛应用。 ASTM D7032-21木塑地板、踏板、围栏和扶手检测项目 测试项目 测试标准 弯曲强度 ASTM D6109 弯曲刚度 ASTM D6109 温湿效应 AS

python / 和 % 和 //(地板除)解析(最清晰的解释)

欢迎关注WX公众号:【程序员管小亮】 python / 和 % 和 //(地板除)用于对数据进行除法运算。 Python中分为3种除法:1、/,2、%,3、//。 1、/ 基于 python3 / 除法计算结果是浮点数,即使是两个整数恰好整除,结果也是浮点数。 两个整数没能整除,返回整数 10 / 3> 3.3333333333333335 两个浮点数相除,返回浮点数

poj 2411 编程之美 4.2 瓷砖覆盖地板

题意:用 1 * 2 的瓷砖覆盖 n * m 的地板,问共有多少种覆盖方式?  思路:用2进制的01表示不放还是放,第i行只和i-1行有关,枚举i-1行的每个状态,推出由此状态能达到的i行状态:如果i-1行的出发状态某处未放,必然要在i行放一个竖的方块,所以我对上一行状态按位取反之后的状态就是放置了竖方块的状态。 然后用dfs搜索在i行放横着的方块的所有可能,并且把这些状态累加上i-1的出发状

2331: [SCOI2011]地板 插头DP

国际惯例的题面:十分显然的插头DP。由于R*C<=100,所以min(R,C)<=10,然后就可以愉悦地状压啦。我们用三进制状压,0表示没有插头,1表示有一个必须延伸至少一格且拐弯的插头,2表示有一个必须延伸一格且不可以拐弯的插头。转移的话就十分显然了。00->22,表示用这个格子作为开始的拐角。00->10,表示用这个格子向下延伸。00->01,表示用这个格子向右延伸。01->10,表示这个格