BZOJ 4031: [HEOI2015]小Z的房间 高斯消元 MartixTree定理 辗转相除法
2016-02-20 18:59
495 查看
4031: [HEOI2015]小Z的房间
题目连接:
http://www.lydsy.com/JudgeOnline/problem.php?id=4031Description
你突然有了一个大房子,房子里面有一些房间。事实上,你的房子可以看做是一个包含n*m个格子的格状矩形,每个格子是一个房间或者是一个柱子。在一开始的时候,相邻的格子之间都有墙隔着。你想要打通一些相邻房间的墙,使得所有房间能够互相到达。在此过程中,你不能把房子给打穿,或者打通柱子(以及柱子旁边的墙)。同时,你不希望在房子中有小偷的时候会很难抓,所以你希望任意两个房间之间都只有一条通路。现在,你希望统计一共有多少种可行的方案
Input
第一行两个数分别表示n和m。接下来n行,每行m个字符,每个字符都会是’.’或者’’,其中’.’代表房间,’’代表柱子。
Output
一行一个整数,表示合法的方案数 Mod 10^9Sample Input
3 3...
...
.*.
Sample Output
15Hint
题意
题解:
首先你要懂MartixTree定理(不懂就百度吧然后你要懂高斯消元
然后你要懂如何mod1e9这个破玩意儿(用辗转相除法
然后这道大水题就AC了
代码
#include<bits/stdc++.h> using namespace std; const int maxn = 100; const int mod = 1e9; char s[maxn]; int n,m,tot; int id[maxn][maxn],dx[4]={1,-1,0,0},dy[4]={0,0,1,-1}; int g[maxn][maxn]; long long quickpow(long long m,long long n,long long k)//返回m^n%k { long long b = 1; while (n > 0) { if (n & 1) b = (b*m)%k; n = n >> 1 ; m = (m*m)%k; } return b; } void guess(int len) { for(int i=1;i<len;i++) for(int j=1;j<len;j++) g[i][j]=(g[i][j]+mod)%mod; long long ans = 1; for(int i=1;i<len;i++) { for(int j=i+1;j<len;j++) { long long a=g[i][i],b=g[j][i]; while(b) { long long temp = a/b;a%=b;swap(a,b); for(int k=i;k<len;k++)g[i][k]=(g[i][k]-g[j][k]*temp)%mod; for(int k=i;k<len;k++)swap(g[i][k],g[j][k]); ans=-ans; } } } for(int i=1;i<len;i++) ans = ans*g[i][i]%mod; if(ans<0)ans+=mod; cout<<ans<<endl; } int main() { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { scanf("%s",s+1); for(int j=1;j<=m;j++) if(s[j]=='.') id[i][j]=++tot; } for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if(id[i][j]) { for(int k=0;k<4;k++) { int x=i+dx[k],y=j+dy[k]; if(id[x][y]) g[id[i][j]][id[i][j]]++,g[id[i][j]][id[x][y]]--; } } } } guess(tot); }
相关文章推荐
- 从一个数组中随机的取出若干个不同的数
- 观察者模式
- 1025. PAT Ranking (25)
- 《Effictive Objective-C 2.0》读书摘要(下)
- android xmpp
- 189. Rotate Array
- python 中 lambda的一些tips
- 在虚拟机(VMware)中安装Linux CentOS系统
- hdu 1150 Machine Schedule(求最小点覆盖)
- Xcode7及swift2.0更新后toInt()无法使用解决办法
- The Log-Structured Merge-Tree(译)
- 有源、无源蜂鸣器的区别_20160220
- Android通过JNI操作串口
- appcompat_v7/res/values-v21/themes_base.xml No resource found that matches the given name
- 架构之路(四):测试驱动
- TensorFlow中权重的随机初始化
- linux命令dd
- TQ2440,学习笔记之链接器脚本
- 基于友善之臂ARM-tiny4412--uboot源码分析
- 基于友善之臂ARM-tiny4412--uboot源码分析