暴力搜索加剪枝,二进制保存状态,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的更多相关文章

  1. 《转载》PAT 习题

    博客出处:http://blog.csdn.net/zhoufenqin/article/details/50497791 题目出处:https://www.patest.cn/contests/pa ...

  2. PAT Judge

    原题连接:https://pta.patest.cn/pta/test/16/exam/4/question/677 题目如下: The ranklist of PAT is generated fr ...

  3. PAT/字符串处理习题集(二)

    B1024. 科学计数法 (20) Description: 科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式[+-][1-9]"."[0-9]+E[+ ...

  4. PAT 1041. 考试座位号(15)

    每个PAT考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位.正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考试座位号码,考试时考生需要换到考试座 ...

  5. PAT 1040. 有几个PAT(25)

    字符串APPAPT中包含了两个单词"PAT",其中第一个PAT是第2位(P),第4位(A),第6位(T):第二个PAT是第3位(P),第4位(A),第6位(T). 现给定字符串,问 ...

  6. PAT 1032. 挖掘机技术哪家强(20)

    为了用事实说明挖掘机技术到底哪家强,PAT组织了一场挖掘机技能大赛.现请你根据比赛结果统计出技术最强的那个学校. 输入格式: 输入在第1行给出不超过105的正整数N,即参赛人数.随后N行,每行给出一位 ...

  7. pat甲级题解(更新到1013)

    1001. A+B Format (20) 注意负数,没别的了. 用scanf来补 前导0 和 前导的空格 很方便. #include <iostream> #include <cs ...

  8. PAT (Basic Level) Practise 1040 有几个PAT(DP)

    1040. 有几个PAT(25) 时间限制 120 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CAO, Peng 字符串APPAPT中包含了两个单 ...

  9. PAT (Basic Level) Practise 1045 快速排序(离散化+主席树区间内的区间求和)

    1045. 快速排序(25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CAO, Peng 著名的快速排序算法里有一个经典的划分 ...

随机推荐

  1. BK-信息查找、摘取

    先了解下压缩文件中的内容: 实现功能: 1.根据"e1.xlsx"表中的dealerName.bu(可能没有).时间,匹配"待挖取信息表.xlsx"中对应的相关 ...

  2. 503,display:none;与visibility:hidden;的区别

    联系:他们都能让元素不可见 区别: display:none:会让元素从渲染树中消失,渲染的时候不占据任何空间: visibility:hidden:不会让元素从渲染树中消失,渲染时袁旭继续占据空间, ...

  3. maven版cxf集合spring开发服务端(二)

    一.新建一个maven项目 二.pom.xml引入依赖 <dependency> <groupId>org.apache.cxf</groupId> <art ...

  4. 算法刷题--回溯算法与N皇后

    所谓回溯算法,在笔者看来就是一种直接地思想----假设需要很多步操作才能求得最终的解,每一步操作又有很多种选择,那么我们就直接选择其中一种并依次深入下去.直到求得最终的结果,或是遇到明细的错误,回溯到 ...

  5. 2016 Google code jam 大赛

    二,RoundC import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileNotFoundE ...

  6. 从0到1了解 CI/CD

    现代软件开发的需求加上部署到不同基础设施的复杂性使得创建应用程序成为一个繁琐的过程.当应用程序出现规模性增长,开发团队人员变得更分散时,快速且不断地生产和发布软件的流程将会变得更加困难.为了解决这些问 ...

  7. 【PAT甲级】1082 Read Number in Chinese (25 分)

    题意: 输入一个九位整数,输出它的汉字读法(用拼音表示). trick: 字符串数组""其实会输出一个空格,而不是什么都不输出,导致测试点0和4格式错误. AAAAAccepted ...

  8. java处理节假日和工作时间的工具类

    import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; impo ...

  9. Redis的安装和启动(一)

    一.Redis的安装 获取redis的安装包 ①如果能上网,选择以下命令:wget http://download.redis.io/releases/redis-3.2.11.tar.gz ②如果不 ...

  10. Django模板及路由的配置

    学习内容: (1)路由的配置 (2)模板的介绍 (3)模板显示数据 一.路由的配置 以上一篇文章的名字Booketest项目,有一个子模块demo1进行讲解. 1.首先在Booktest项目下的同名子 ...