题目链接


Solution

比较恶心的搜索,思路很简单,直接广搜找联通块即可.

但是细节很多,要注意的地方很多.所以直接看代码吧...

Code

  1. #include<bits/stdc++.h>
  2. int mp[52][52],n,m,cnt;
  3. int v[52][52],col[52][52];
  4. int siz[2508],num,maxx,kk;
  5. struct node{int x,y;};
  6. struct point{int w,x,y;char ch;}ans[10002];
  7. bool cmp(point s,point j){
  8. if(s.w==j.w)
  9. {
  10. if(s.y==j.y)
  11. {
  12. if(s.x==j.x) return s.ch-'A'>j.ch-'A';
  13. return s.x>j.x;
  14. }
  15. return s.y<j.y;
  16. }
  17. return s.w>j.w;}
  18. using namespace std;
  19. int read()
  20. {
  21. char ch=getchar(); int f=1,w=0;
  22. while(ch<'0'||ch>'9'){ch=getchar();}
  23. while(ch<='9'&&ch>='0'){w=w*10+ch-'0';ch=getchar();}
  24. return f*w;
  25. }
  26. void bfs(int xx,int yy)
  27. {
  28. queue<node>q; cnt++;
  29. q.push((node){xx,yy});
  30. v[xx][yy]=1;
  31. while(!q.empty())
  32. {
  33. node x=q.front(); q.pop();
  34. int i=x.x,j=x.y;
  35. col[i][j]=cnt;
  36. siz[cnt]++;
  37. int w=mp[i][j];
  38. if(!(w>>0&1)) if(j>1&&!v[i][j-1])
  39. q.push((node){i,j-1}),v[i][j-1]=1;
  40. if(!(w>>1&1)) if(i>1&&!v[i-1][j])
  41. q.push((node){i-1,j}),v[i-1][j]=1;
  42. if(!(w>>2&1)) if(j<m&&!v[i][j+1])
  43. q.push((node){i,j+1}),v[i][j+1]=1;
  44. if(!(w>>3&1)) if(i<n&&!v[i+1][j])
  45. q.push((node){i+1,j}),v[i+1][j]=1;
  46. }
  47. maxx=max(maxx,siz[cnt]);
  48. }
  49. void work(int x,int y)
  50. {
  51. for(int i=-1;i<2;i++)
  52. for(int j=-1;j<2;j++)
  53. if(abs(i+j)==1)
  54. if(x+i>0&&x+i<=n)
  55. if(y+j>0&&y+j<=m)
  56. if(col[x+i][y+j]!=col[x][y])
  57. {
  58. if(siz[col[x+i][y+j]]+siz[col[x][y]]>=kk)
  59. {
  60. kk=siz[col[x+i][y+j]]+siz[col[x][y]];
  61. js[x][y]++;
  62. ans[++num].w=kk;ans[num].x=x;
  63. ans[num].y=y;
  64. if(i==1)ans[num].ch='S';
  65. if(i==-1)ans[num].ch='N';
  66. if(j==1)ans[num].ch='E';
  67. if(j==-1)ans[num].ch='W';
  68. }
  69. }
  70. }
  71. int main()
  72. {
  73. m=read(); n=read();
  74. for(int i=1;i<=n;i++)
  75. for(int j=1;j<=m;j++)
  76. mp[i][j]=read();
  77. for(int i=1;i<=n;i++)
  78. for(int j=1;j<=m;j++)
  79. if(!v[i][j])
  80. bfs(i,j);
  81. cout<<cnt<<endl;
  82. cout<<maxx<<endl;
  83. for(int i=1;i<=n;i++)
  84. for(int j=1;j<=m;j++)
  85. work(i,j);
  86. sort(ans+1,ans+num+1,cmp);
  87. cout<<kk<<endl;
  88. int k=1;
  89. for(int i=2;i<=num;i++)
  90. {
  91. if(ans[i].w!=kk)break;
  92. if(ans[i].y!=ans[i].y&&ans[i-1].x!=ans[i-1].y)break;
  93. while(ans[i].y==ans[i-1].y)
  94. i++; k=i;
  95. }
  96. cout<<ans[1].x<<' '<<ans[1].y<<' '<<ans[1].ch<<endl;
  97. return 0;
  98. }

[USACO Section 2.1]城堡 The Castle (搜索)的更多相关文章

  1. 洛谷P1457 城堡 The Castle

    P1457 城堡 The Castle 137通过 279提交 题目提供者该用户不存在 标签USACO 难度提高+/省选- 提交  讨论  题解 最新讨论 暂时没有讨论 题目描述 我们憨厚的USACO ...

  2. 洛谷 P1457 城堡 The Castle 解题报告

    P1457 城堡 The Castle 题目描述 我们憨厚的USACO主人公农夫约翰(Farmer John)以无法想象的运气,在他生日那天收到了一份特别的礼物:一张"幸运爱尔兰" ...

  3. 洛谷 P1457 城堡 The Castle

    P1457 城堡 The Castle 题目描述 我们憨厚的USACO主人公农夫约翰(Farmer John)以无法想象的运气,在他生日那天收到了一份特别的礼物:一张“幸运爱尔兰”(一种彩票).结果这 ...

  4. USACO Section 2.1 The Castle 解题报告

    题目 题目描述 有一个城堡,城堡中有若干个房间,房间与房间之间用墙来进行分隔.现在我们需要统计这个城堡有多少个房间,并且还要找出最大的房间的面积是多少(一个单元格就代表一个单元面积).城堡的主人现在想 ...

  5. USACO Section 2.1 The Castle

    /* ID: lucien23 PROG: castle LANG: C++ */ /********************************************************* ...

  6. Usaco Training [2.1] The Castle 搜索

    传送门 题目的输出的4个信息 前两个很容易,dfs,bfs都可以,图怎么建都可以 后两个在搜索的时候记录belong[i][j]和已有的size即可 代码应该比不少题解清晰吧 #include < ...

  7. USACO 1.3... 虫洞 解题报告(搜索+强大剪枝+模拟)

    这题可真是又让我找到了八数码的感觉...哈哈. 首先,第一次见题,没有思路,第二次看题,感觉是搜索,就这样写下来了. 这题我几乎是一个点一个点改对的(至于为什么是这样,后面给你看一个神奇的东西),让我 ...

  8. P1457 城堡 The Castle

    轻度中毒 原题 :The Castle 以下为题解部分:明明辣么简单的一道题,硬是搞了1.5h,WTF?以下列出本题的一些要点. 搜索(DFS)嘛,染色嘛,统计大小嘛,很容易想,也很更易处理. 接下来 ...

  9. USACO Section 1.3 题解 (洛谷OJ P1209 P1444 P3650 P2693)

    usaco ch1.4 sort(d , d + c, [](int a, int b) -> bool { return a > b; }); 生成与过滤 generator&& ...

随机推荐

  1. Trie入门讲解

    我们常常用Trie(也叫前缀树)来保存字符串集合.如下图所示就是一个Trie. 上图表示的字符串集合为$\{a,to,tea,ted,ten,i,in,inn \}$,每个单词的结束位置对应一个“单词 ...

  2. webpack-dev-server配置指南webpack3.0

    最近正在研究webpack,听说webpack可以自己搭建一个小型的服务器(使用过vue-cli的朋友应该都见识到过),所以迫不及待的想要尝试一下.不过,在实际操作中发现,用webpack搭建服务器仍 ...

  3. destoon登录后跳转到指定网址

    打开module\member\register.inc.php文件搜索:<input type="hidden" name="forward" valu ...

  4. 关于flyme5显示不到和卸载不到旧应用解决方法

    笔者买入一台mx5,升级flyme5后旧应用没有显示出来,而且在设置的应用管理都没显示旧应用. 通过adb命令: adb shell pm list packages显示所有包名, 查看自己要删除应用 ...

  5. Codevs1033 蚯蚓的游戏

    题目描述 Description 在一块梯形田地上,一群蚯蚓在做收集食物游戏.蚯蚓们把梯形田地上的食物堆积整理如下: a(1,1)  a(1,2)…a(1,m) a(2,1)  a(2,2)  a(2 ...

  6. NOIP计划索引

    药丸的节奏 亟待解决的问题 灵光一现的trick 2018上学期刷题记录 NOIP2018 - 暑期博客整理 NOIP2018 - 一些板子 NOIP2018 - 每日填坑

  7. MySQL 如何将Id相同的字段合并,并且以逗号隔开

    数据库存的数据 sql: SELECT Id,GROUP_CONCAT(`Name` SEPARATOR ',') NAMES FROM `stu` GROUP BY Id;

  8. linux SVN安装及配置教程

    1.环境centos6.4 2.安装svnyum -y install subversion 3.配置 建立版本库目录mkdir /www/svndata svnserve -d -r /www/sv ...

  9. python爬虫基础15-python图像处理,PIL库

    Python图像处理-Pillow 简介 Python传统的图像处理库PIL(Python Imaging Library ),可以说基本上是Python处理图像的标准库,功能强大,使用简单. 但是由 ...

  10. python爬虫基础09-selenium大全3/8-Remote Webdriver

    Selenium笔记(3)Remote Webdriver 本文集链接:https://www.jianshu.com/nb/25338984 简介 selenium.webdriver.remote ...