USACO的题目,感觉还是挺神奇的.

前置芝士

  1. DFS(BFS)遍历:用来搜索(因为DFS好写,本文以DFS为准还不是因为作者懒)
  2. STL中的set(map)的基本用法:数据很大,不能直接存.

具体做法

因为不能把草堆围起来造成的周长记录起来所以不能再草堆中搜索,需要再这个草堆外面绕着搜索这样就不会将内部的周长记录下来了.



如这样一张图它的周长是(红色部分):



于是需要找到一个在最外边的点,可以发现最上方的那个点的就十分合适,搜索的位置(蓝色部分)



从最上方开始搜,如果搜到了草就answer++,return.

但是这样搜的时候如果一直往外跑就会直接炸掉,所以必须不能有这种情况,可以发现对于每一个蓝色位置的八个方向的一格处至少有一个草堆,于是如果没有草堆就直接退出.

代码

#include<bits/stdc++.h>
#define rap(i,first,last) for(int i=first;i<=last;++i)
using namespace std;
const int move_x[9]={233,0,0,1,-1,1,1,-1,-1};
const int move_y[9]={233,1,-1,0,0,1,-1,1,-1};
set<pair<int,int> >_map;//用来记录这张图
set<pair<int,int> >visit;//用来判断这个位置有没有走过
int N,fx=-1,fy,answer=0;
bool OutSide(int x,int y)//判断八个方向上有没有草堆
{
rap(i,1,8)
if(_map.count(make_pair(x+move_x[i],y+move_y[i])))return 0;//有就返回0
return 1;//没有返回1
}
void DFS(int x,int y)//DFS
{
if(_map.count(make_pair(x,y)))//如果这个位置是草堆就answer++,return
{
answer++;
return;
}
if(visit.count(make_pair(x,y)))return;//走过了就不能在走了
visit.insert(make_pair(x,y));//记录这个位置走过
if(OutSide(x,y))return;//如果八个方向上没有草堆则return
rap(i,1,4)//向四个方向搜索
DFS(x+move_x[i],y+move_y[i]);
}
int main()
{
scanf("%d",&N);
int x,y;
rap(i,1,N)
{
scanf("%d%d",&x,&y);
_map.insert(make_pair(x,y));//地图中这个位置有草堆
if(x>fx)
{
fx=x;
fy=y;
}
}
DFS(fx+1,fy);//最上方那个点上方的那个点开始搜索
printf("%d",answer);//输出answer
return 0;
}

最新文章

  1. WCF服务接口多,客户端在引用时出错!报WCF The maximum nametable character count quota (16384) has been exceeded while reading XML data错误
  2. phalcon:数据库分库,读写分离,负载均衡 系统方法执行顺序
  3. LRU算法实现
  4. Helpers\Hooks
  5. 数组(Array)
  6. (五)认识Android中的Service
  7. android双击返回键退出程序
  8. iOS -不同模拟器字体适配
  9. Canvas中绘制贝塞尔曲线
  10. 在Mac os 10.11 下编译Berkeley caffe
  11. delete 和 delete []的区别
  12. 【大数据系列】win10不借助Cygwin安装hadoop2.8
  13. POJ-1953 World Cup Noise(线性动规)
  14. springmvc基础流程
  15. ExpandoObject与DynamicObject的使用
  16. django-引用静态文件
  17. .net core webapi参数绑定处理
  18. bzoj1069-最大土地面积
  19. bzoj 1098 [POI2007]办公楼biu bfs+补图+双向链表
  20. vue-music 关于Search(搜索页面)-- 搜索历史

热门文章

  1. php7 Memcached
  2. 探讨 Git 代码托管平台的若干问题
  3. Nmap工具用法详解
  4. Snuke's Coloring 2-1
  5. 前缀和-Big Water Problem (牛客)
  6. 【PAT甲级】1068 Find More Coins (30 分)(背包/DP)
  7. 两个list 集合比较属性不同的值
  8. (0)Lora及LoraWAN
  9. Excel实用知识1
  10. JavaScript - 运行机制,作用域,作用域链(Scope chain)