Description

米基家的后院养着一群羊,米基由于疲劳睡着了,这时一群饿狼钻进了后院开始攻击羊群,后院是由许多个方格构成的长方形区域,每个方格中用字符‘?’表示空地,‘#’表示栅栏,‘o’表示羊,‘v’表示狼,羊和狼所在的格子都是空地。如果从一个空地A沿着水平方向或垂直方向经过一系列的空地能够到达空地B,则称空地A和空地B属于同一个羊圈。对于能够逃离后院的空地我们认为它不属于任何一个羊圈。当一个羊圈中羊的数量大于狼的数量时,它们会用它们的尖角顶死该羊圈中的狼,否则就将被狼吃掉,最后每个羊圈中只会剩下一种动物。写一个程序统计战斗结束后所有羊圈中羊的总数和狼的总数。

Input

第一行包含两个用空格隔开的自然数R和C,其中3<=R,C<=250,R表示米基家后院的行数,C表示列数,接下来的R行

每行包含C个字符,每个字符表示一个格子的情况。

Output

仅一包含两个用一个空格隔开的整数,表示要求的羊的数量和狼的数量。

Sample Input

9 12
.###.#####..
#.oo#...#v#.
#..o#.#.#.#.
#..##o#...#.
#.#v#o###.#.
#..#v#....#.
#...v#v####.
.####.#vv.o#
.......####.

Sample Output

3 5

这道题目emm,虽然是BFS的 水 题,但是有一个点卡了我很久。

最开始我的代码总是TLE,找机房大佬来看也看不出什么不对,大概思路是这样的:

输入->遍历一遍图,找到不是#的就bfs->bfs计这一片的羊和狼的数量->把相邻的不是#的都变成#->统计输出

最后才发现,我的代码里面计数并变成#的这一板块是放在bfs里while的开头,也就是当处理队头的时候才计数变#,所以就TLE,…

然后把这一块改到打进队列的时候操作,居然就 24ms 水过去了!

代码不规范,WA两行泪!

下面就是代码部分emm

#include<bits/stdc++.h>
using namespace std;
int n,m;
int lang,yang;//awa
char mp[258][258];
struct node
{
int x,y;
};
int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
void bfs(int x,int y)
{
int nl=0,ny=0;//now_lang,now_yang
queue<node> q;
q.push((node){x,y});
if(mp[x][y]=='o')ny++;
else if(mp[x][y]=='v')nl++;
mp[x][y]='#';
while(!q.empty())
{
node now=q.front();
q.pop();
for(int i=0;i<4;i++)
{
int tx=now.x+dir[i][0],ty=now.y+dir[i][1];
if(mp[tx][ty]!='#'&&1<=tx&&tx<=n&&1<=ty&&ty<=m)
{
q.push((node){tx,ty});
if(mp[tx][ty]=='o')ny++;
else if(mp[tx][ty]=='v')nl++;
mp[tx][ty]='#';
}
}
}
if(ny>nl)yang+=ny;
else lang+=nl;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>mp[i][j];
}
}
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(mp[i][j]!='#')bfs(i,j);
// for(int i=1;i<=n;i++)
// {
// for(int j=1;j<=m;j++)
// {
// cout<<mp[i][j];
// }
// cout<<endl;
// } cout<<yang<<" "<<lang<<endl;
return 0;
}

p.s. 惨不忍睹的部分请自行跳过awa

【题解】狼和羊-C++的更多相关文章

  1. 题解 P2598 【[ZJOI2009]狼和羊的故事】

    P2598 [ZJOI2009]狼和羊的故事 题目描述 "狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......" Orez听到这首歌,心想:狼 ...

  2. 洛谷P2598 [ZJOI2009]狼和羊的故事 题解

    题目链接: https://www.luogu.org/problemnew/show/P2598 分析: 我们知道此题的目的是将狼和羊分割开,很容易想到狼在S,羊在T中. 首先,我们可以在狼,羊,空 ...

  3. 【BZOJ 1412】[ZJOI2009]狼和羊的故事

    Description “狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......” Orez听到这首歌,心想:狼和羊如此和谐,为什么不尝试羊狼合养呢?说干就干! O ...

  4. 【BZOJ1412】狼和羊的故事(网络流)

    [BZOJ1412]狼和羊的故事(网络流) 题面 Description "狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......" Orez听 ...

  5. 【BZOJ1412】[ZJOI2009]狼和羊的故事 最小割

    [BZOJ1412][ZJOI2009]狼和羊的故事 Description “狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......” Orez听到这首歌,心想: ...

  6. 【bzoj1412】[ZJOI2009]狼和羊的故事 网络流最小割

    题目描述 “狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......” Orez听到这首歌,心想:狼和羊如此和谐,为什么不尝试羊狼合养呢?说干就干! Orez的羊狼圈 ...

  7. 1412: [ZJOI2009]狼和羊的故事

    Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4017  Solved: 2037[Submit][Status][Discuss] Descript ...

  8. LG2598/BZOJ1412 「ZJOI2009」狼和羊的故事 最小割

    问题描述 LG2598 BZOJ1412 题解 看到要把狼和羊两个物种分开 自然想到最小割. 发现\((x,y)\)可以向上下左右走以获得贡献,所以建边:\((x,y),(x-1,y)\),\((x, ...

  9. 嘴巴题3 「BZOJ1412」[ZJOI2009] 狼和羊的故事

    「BZOJ1412」[ZJOI2009] 狼和羊的故事 Description "狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......" Or ...

随机推荐

  1. Erlang:[笔记二,构建工具rebar之发布应用]

    概述 通过rebar可以发布rebar构建的erlang项目,生成可执行的二进制脚本文件,大大降低了执行应用的复杂度.该笔记Erlang环境为Erlang/OTP 19 ,以下适用于Eralng/OT ...

  2. Prime Time UVA - 10200(精度处理,素数判定)

    Problem Description Euler is a well-known matematician, and, among many other things, he discovered ...

  3. 利用Python进行数据分析_Numpy_基础_2

      Numpy数据类型包括: int8.uint8.int16.uint16.int32.uint32.int64.uint64.float16.float32.float64.float128.co ...

  4. 记录学习Python的第一天

    这是我的第一篇博客,也是我学Python的第一天. 写这篇博客主要目的是为了记下我学习Python的过程以及所学到的知识点.我所学的是Python3版本,我所学的内容有如下几点: 1.python3中 ...

  5. java.lang.ClassCastException: com.sun.proxy.$Proxy4 cannot be cast

    解决方案 在配置文件中配置proxy-target-class="true" <aop:aspectj-autoproxy proxy-target-class=" ...

  6. 路由器开源系统openwrt配置页面定制

    1. 新建虚拟机,百度文库有一篇<使用VMware安装OpenWrt>,地址:http://wenku.baidu.com/link?url=NkvaQpTf2dR8FpYn7JD9A7- ...

  7. JavaBean 详细

    一.什么是JavaBean? JavaBean是一个遵循特定写法的Java类,它通常具有如下特点: 这个Java类必须具有一个无参的构造函数 属性必须私有化. 私有化的属性必须通过public类型的方 ...

  8. Go part 1 初探

    Go 语言简介 Go 语言是 Google 在2007年开发的一种开源编程语言,于2009年11月10日向全球公布 出自 Ken Thompson 和 Rob Pike.Robert Grieseme ...

  9. 1、Java基础:面向对象六大原则

    本文主要介绍了面向对象六大原则. 单一职责原则(Single-Resposibility Principle). “对一个类而言,应该仅有一个引起它变化的原因.”本原则是我们非常熟悉地”高内聚性原则” ...

  10. Android高版本收不到静态注册的广播

    Beginning with Android 8.0 (API level 26), the system imposes additional restrictions on manifest-de ...