description

森林里有一片长方形的草地,在清晨的大雪过后被一层厚厚的积雪所掩盖(下图左)。

住在森林里的兔子和狐狸,穿越草地,都会在雪地上留下他们的踪迹。他们总是从左上角进入,并从右下角离开草地。在这两者之间,他们可以来回走动,在雪地里玩,甚至在同一个地方多次留下踪迹。在任何时候,最多只有一只动物在草地上,且所有的动物都只进入草地一次。这些动物的运动踪迹可以被简单的利用横纵坐标来描述。它们不会斜着走,也不会跳越一个单元格。当新的动物进入单元格,旧的足迹都将被新的足迹所覆盖。

例如,第一个兔子从左上角到右下角越过草地(图中)。在那之后,一只狐狸越过,则他的运动踪迹将会覆盖兔子的踪迹(图右)。

你将在一段时间后,得到一张描述草地上每个单元格的状态的地图。请写一个程序,计算可能出现的动物数目的最小值N。


analysis

  • 倒数第一条路径明显已经知道,假设为同一个动物所为

  • 那么贴着该路径的第二种颜色的格子一定被当前覆盖

  • 假设倒数第二条路径走遍了倒数第一条路径的全部格子,即为最优解

  • 该路径贴着的不同颜色的格子也同理

  • 于是两个队列循环\(bfs\)即可

  • 我不懂这种时间复杂度可以保证的题卡常数有什么意义


code

#pragma GCC optimize("O3")
#pragma G++ optimize("O3")
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<queue>
#define MAXN 4005
#define ll long long
#define fo(i,a,b) for (ll i=a;i<=b;++i)
#define fd(i,a,b) for (ll i=a;i>=b;--i) using namespace std; ll a[MAXN][MAXN];
bool bz[MAXN][MAXN];
ll f[4][2];
ll n,m,color,tot,ans; struct node
{
ll x,y;
}tmp;
queue<node>q[2]; inline ll read()
{
ll x=0,f=1;char ch=getchar();
while (ch<'0' || '9'<ch){if (ch=='-')f=-1;ch=getchar();}
while ('0'<=ch && ch<='9')x=x*10+ch-'0',ch=getchar();
return x*f;
}
int main()
{
//freopen("T2.in","r",stdin);
n=read(),m=read();
fo(i,1,n)
{
fo(j,1,m)
{
bz[i][j]=1;
char ch=getchar();
if (ch=='F')a[i][j]=1;
else if (ch=='R')a[i][j]=2;
}
scanf("\n");
}
bz[1][1]=0;
f[0][0]=-1,f[0][1]=0,f[1][0]=1,f[1][1]=0;
f[2][0]=0,f[2][1]=-1,f[3][0]=0,f[3][1]=1;
tmp.x=tmp.y=1,q[0].push(tmp);
ll las=0,noww=1;
while (ans==0 || (ans>0 && !q[las].empty()))
{
++ans,color=a[q[las].front().x][q[las].front().y];
while (!q[las].empty())
{
node now=q[las].front();q[las].pop();
fo(i,0,3)
{
ll x=now.x+f[i][0],y=now.y+f[i][1];
tmp.x=x,tmp.y=y;
if (1<=x && x<=n && 1<=y && y<=m && bz[x][y])
{
if (a[x][y]==color)bz[x][y]=0,q[las].push(tmp);
else if (a[x][y] && bz[x][y])bz[x][y]=0,q[noww].push(tmp);
}
}
}
noww^=1,las^=1;
}
printf("%lld\n",ans);
return 0;
}

【JZOJ3319】雪地踪迹的更多相关文章

  1. 小随笔:利用Shader给斯坦福兔子长毛和实现雪地效果

    0x00 前言 发现最近没有了写长篇大论的激情,可能是到了冬天了吧.所以这篇小文只是简单介绍下如何在Unity中利用shader很简单的实现雪地效果以及毛皮效果,当然虽然标题写在了一起,但其实这是俩事 ...

  2. 19、Cocos2dx 3.0游戏开发找小三之Action:流动的水没有形状,漂流的风找不到踪迹、、、

    重开发人员的劳动成果.转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/30478985 流动的水没有形状.漂流的风找不到踪迹. ...

  3. exception 打印出异常栈踪迹

    Java异常抛出使用e.printStackTrace(),打印出抛出的异常栈踪迹, 如果你在catch中继续抛出这个异常,那么e.printStackTrace()也能跟踪到抛出异常的地方, 使用t ...

  4. ue4 射线Trace Responses(踪迹响应)

    关于 Visibility和Camera区别 就是两个预定义通道 可以通过Character和pawn的Collider设置看出为什么要有这两个的区别,预制值设置成Pawn也是跟下图一致 所以Visi ...

  5. 梦殇 chapter one

    梦殇 chapter one 星梦 天空中飘着几片云,喝着小鸟的欢呼声,这一切似乎显得愈加可爱了. 不觉间已经到了2013年,错过的12年,似乎在向我们招手,不知道远方的朋友们,你们还好吗? 是否也会 ...

  6. 一起学微软Power BI系列-使用技巧(1)连接Oracle与Mysql数据库

    说起Oracle数据库,以前没用过Oracle不知道,但是这1年用Oracle后,发现真的是想狂吐槽,特别是那个.NET驱动和链接字符串,特别奇葩.总归是和其他数据库不一样,标新立异,不知道为何.另外 ...

  7. 【C#代码实战】群蚁算法理论与实践全攻略——旅行商等路径优化问题的新方法

    若干年前读研的时候,学院有一个教授,专门做群蚁算法的,很厉害,偶尔了解了一点点.感觉也是生物智能的一个体现,和遗传算法.神经网络有异曲同工之妙.只不过当时没有实际需求学习,所以没去研究.最近有一个这样 ...

  8. Phoenix综述(史上最全Phoenix中文文档)

    个人主页:http://www.linbingdong.com 简书地址:http://www.jianshu.com/users/6cb45a00b49c/latest_articles 网上关于P ...

  9. 一缕阳光:DDD(领域驱动设计)应对具体业务场景,如何聚焦 Domain Model(领域模型)?

    写在前面 阅读目录: 问题根源是什么? <领域驱动设计-软件核心复杂性应对之道>分层概念 Repository(仓储)职责所在? Domain Model(领域模型)重新设计 Domain ...

随机推荐

  1. 《DSP using MATLAB》Problem 8.45

    代码: %% ------------------------------------------------------------------------ %% Output Info about ...

  2. java程序——CPU过高100%及内存泄露排查

    CPU过高 这类问题可以使用 top 命令观察一些,CPU 是不是都被 Java 程序占用了.比如下面这个截图: 服务器的 CPU 大多都被 Java 占用了.这正是我们之前生产上 CPU 过高的一个 ...

  3. CSS Sprites(CSS图像拼合技术)教程、工具集合

    本集合是有一位国外设计师收集整合,并由 oncoding翻译成中文的,感谢他们的辛苦贡献.CSS Sprites技术在国外并不是什么新技术,只不过近两年(尤其08年开始)中国开始流行这个词,大家也开始 ...

  4. MySQL 不用 Null 的理由

    Null 貌似在哪里都是个头疼的问题,比如 Java 里让人头疼的 NullPointerException,为了避免猝不及防的空指针异常,千百年来程序猿们不得不在代码里小心翼翼的各种 if 判断,麻 ...

  5. 查看Linux 内核版本命令

    1.Ubuntu 查看版本命令,三种方法. 1.使用  "uname -a" 2.使用  "lsb_release -a"   3.使用  "cat ...

  6. 使用Fiddler模拟弱网络环境测试

    https://blog.csdn.net/swordgirl2011/article/details/51765237 https://www.cnblogs.com/longronglang/p/ ...

  7. ReentrantLock与synchronized的区别

    1.与synchronized相比,ReentrantLock提供了更多,更加全面的功能,具备更强的扩展性.例如:时间锁等候,可中断锁等候,锁投票. 2.ReentrantLock还提供了条件Cond ...

  8. 暴力贪心+预处理自动机——cf990E

    枚举每种灯管,然后找到代价最小的那种灯管 贪心策略:灯管从0开始向右放置,如果末尾是不能放置灯管的结点,那么要往回找到最近一个可以放置灯管的结点,在那里放置灯管 所以先预处理每个不能放置灯管的结点对应 ...

  9. 解决Delphi 2010启动时卡死并报displayNotification堆栈溢出错误

    1. 清理IE的历史记录,删除浏览器缓存(不需要清cookie) 2. 禁用startpage 2.1 从 Delphi 2010 启动菜单上点右键 -> 查看属性->快捷方式->目 ...

  10. mysql 新特性之geometry

    1.获取矩形两个点的数据(左上角和右下角) SELECT  *    FROM    t_location    WHERE   MBRContains                    (    ...