PAT T1019 Separate the Animals
暴力搜索加剪枝,二进制保存状态,set去重~
#include<bits/stdc++.h>
using namespace std;
const int maxn=;
string s[maxn];
struct node {
int x,y;
}Node[];
int N,M,K,H;
int g[maxn][maxn];
int visit[maxn][maxn];
int X[]={,,-,};
int Y[]={,,,-};
int judge (int x,int y) {
if (x>N||x<||y>M||y<) return -;
if (g[x][y]>) return ;
return ;
}
unordered_set<long long> st;
int cnt=;
int hole=;
long long ans=;
int result=;
void bfs () {
queue<node> q;
memset (visit,,sizeof(visit));
int cky=;
for (int i=;i<=N;i++) {
for (int j=;j<=M;j++) {
if (g[i][j]==) continue;
if (visit[i][j]) continue;
int flag=;
int animal=;
visit[i][j]=;
if (g[i][j]==) animal++;
q.push({i,j});
while (!q.empty()) {
node u=q.front();
q.pop();
for (int k=;k<;k++) {
int tx=u.x+X[k];
int ty=u.y+Y[k];
if (g[tx][ty]==) continue;
if (visit[tx][ty]==) continue;
if (judge(tx,ty)==-) {
flag=;
continue;
}
if (g[tx][ty]==) animal++;
if (animal>=) cky=;
visit[tx][ty]=;
q.push({tx,ty});
}
}
if (flag) hole++;
}
}
if (cky==) hole=-;
}
void dfs (int x,int y) {
Node[cnt].x=x;
Node[cnt].y=y;
cnt++;
g[x][y]=;
ans=ans|(1LL<<(x*M+y-));
if (st.count(ans)) {
cnt--;
g[x][y]=;
ans=ans&~(1LL<<(x*M+y-));
return;
}
st.insert (ans);
if (cnt==K) {
hole=;
bfs ();
if (hole==H) result++;
cnt--;
g[x][y]=;
ans=ans&~(1LL<<(x*M+y-));
return;
}
for (int i=cnt-;i>=;i--) {
for (int k=;k<;k++) {
int tx=Node[i].x+X[k];
int ty=Node[i].y+Y[k];
if (judge(tx,ty)==) dfs (tx,ty);
}
}
cnt--;
g[x][y]=;
ans=ans&~(1LL<<(x*M+y-));
}
int main () {
scanf ("%d %d %d %d",&N,&M,&K,&H);
for (int i=;i<=N;i++) cin>>s[i];
for (int i=;i<=N;i++) {
for (int j=;j<M;j++) {
if (s[i][j]=='.') g[i][j+]=;
else g[i][j+]=;
}
}
for (int i=;i<=N;i++) {
for (int j=;j<=M;j++) {
if (!g[i][j]) dfs(i,j);
}
}
printf ("%d\n",result);
return ;
}
PAT T1019 Separate the Animals的更多相关文章
- 《转载》PAT 习题
博客出处:http://blog.csdn.net/zhoufenqin/article/details/50497791 题目出处:https://www.patest.cn/contests/pa ...
- PAT Judge
原题连接:https://pta.patest.cn/pta/test/16/exam/4/question/677 题目如下: The ranklist of PAT is generated fr ...
- PAT/字符串处理习题集(二)
B1024. 科学计数法 (20) Description: 科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式[+-][1-9]"."[0-9]+E[+ ...
- PAT 1041. 考试座位号(15)
每个PAT考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位.正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考试座位号码,考试时考生需要换到考试座 ...
- PAT 1040. 有几个PAT(25)
字符串APPAPT中包含了两个单词"PAT",其中第一个PAT是第2位(P),第4位(A),第6位(T):第二个PAT是第3位(P),第4位(A),第6位(T). 现给定字符串,问 ...
- PAT 1032. 挖掘机技术哪家强(20)
为了用事实说明挖掘机技术到底哪家强,PAT组织了一场挖掘机技能大赛.现请你根据比赛结果统计出技术最强的那个学校. 输入格式: 输入在第1行给出不超过105的正整数N,即参赛人数.随后N行,每行给出一位 ...
- pat甲级题解(更新到1013)
1001. A+B Format (20) 注意负数,没别的了. 用scanf来补 前导0 和 前导的空格 很方便. #include <iostream> #include <cs ...
- PAT (Basic Level) Practise 1040 有几个PAT(DP)
1040. 有几个PAT(25) 时间限制 120 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CAO, Peng 字符串APPAPT中包含了两个单 ...
- PAT (Basic Level) Practise 1045 快速排序(离散化+主席树区间内的区间求和)
1045. 快速排序(25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CAO, Peng 著名的快速排序算法里有一个经典的划分 ...
随机推荐
- Python socket day4
TCP(较UDP麻烦但安全) 服务器和客户端区分的很明白 TCP客户端比起UDP多个连接服务器 TCP服务端 socket创建一个套接字 一定要绑定IP和端口,就跟110一样,是固定的让人随时能知道 ...
- 【SSH】Spring 整合 Struts
添加 spring-struts-3.2.9.RELEASE.jar struts-config.xml 添加 <controller> <set-property property ...
- Lining Up
AtCoder - 2271-Lining Up ...
- libcurl库的简介(二)
下面是使用libcurl库实现文件上传的一个实例: void CDataProcess::sendFileToServer(void) { string netIp = strNetUrl + &qu ...
- 利用ZotFile对Zotero中的文献进行整理
1.安装ZotFile插件 *** 以后补充 *** 2.配置ZotFile 配置 3.整理操作 (1)将文件拖进Zotero软件相应的目录(自己创建) (2)查看文件位置 (未整理之前) (3)整理 ...
- 03-书城bean类中的id缺少get属性
错误:id属性不可读 解决方法: 测试了删除的整个流程,dao-service-servlet ,数据库也能正常测试 想不出来为什么会bean类报错 后来仔细一看id的get属性不知道什么时候被误删了 ...
- webpack初学踩坑记
注意事项: 1. webpack不用装在全局环境下,在哪个项目中使用,就安装在该项目下即可 1. 问题一:npm init 初始化一个项目后,添加webpack.config.js文件,在该项目中通过 ...
- eclipse中使用maven update project功能后,默认又回到了jre 1.5的解决方案
在maven项目中的pom.xml中添加以下节点,进行jre版本的配置,配置完后再进行项目更新后,并不会自动切换到jre1.5 添加在pom的url标签后面 <build> ...
- hibernate并发时的事务处理
两个方法 方法一: public void saveTest() { try { System.out.println("saveTest start"); User user = ...
- SQL Server 2014数据库开启远程连接(Windows Server 2016)
1.打开SQL SERVER 配置管理器 2. 设置防火墙的入站规则 3.使用Navicat Premium连接SQL Server