Codeforces Round #533(Div. 2) D.Kilani and the Game
链接:https://codeforces.com/contest/1105/problem/D
题意:
给n*m的地图,最多9个人,同时有每个人的扩张次数(我开始以为是直线扩张最大长度。。实际是能连续扩张次数。)
地图上有‘#’,‘.',和数字,数字对应每个人的据点,
从1-n轮流扩张。
地图被扩张完后,输入每个人的据点数目。
思路:
赛后写的题。还一堆bug,
用队列和一个数组,记录每个人能扩张的点和下一次能扩张的个数。
然后就是一堆循环套着。每次入队更新下一次的扩张个数,同时用flag记录有几个人还可以扩张。
不能扩张就减一。
代码:
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1010;
struct Node
{
int _x;
int _y;
Node(int x,int y):_x(x),_y(y){}
};
int Next[4][2] = {{-1,0},{0,1},{1,0},{0,-1}};
int next_time[10];
int Map[MAXN][MAXN];
int number[10];
int speed[10];
int vis[10];
queue<Node> player[10]; int main()
{
int n, m, p;
char c;
scanf("%d%d%d", &n, &m, &p);
for (int i = 1; i <= p; i++)
{
scanf("%d", &speed[i]);
}
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= m; j++)
{
cin >> c;
if (c == '.')
Map[i][j] = 0;
else if (c == '#')
Map[i][j] = -1;
else
{
Map[i][j] = c - '0';
player[c - '0'].push(Node(i, j));
number[c - '0']++;
next_time[c - '0']++;
}
}
}
int flag = p;
while (flag > 0)
{
for (int i = 1; i <= p; i++)
{
if (player[i].empty())
continue;
for (int times = 1; times <= speed[i]; times++)
{
int ti = next_time[i];
next_time[i] = 0;
for (int z = 1; z <= ti; z++)
{
//cout << 2 << endl;
int x = player[i].front()._x;
int y = player[i].front()._y;
player[i].pop();
for (int j = 0; j < 4; j++)
{
int tx = x + Next[j][0];
int ty = y + Next[j][1];
if (tx < 1 || tx > n || ty < 1 || ty > m)
continue;
if (Map[tx][ty] != 0 || Map[tx][ty] == '#')
continue;
Map[tx][ty] = i;
number[i]++;
player[i].push(Node(tx, ty));
next_time[i]++;
}
}
if (player[i].empty()&&vis[i] == 0)
{
flag--;
vis[i] = 1;
break;
}
/*
for (int v = 1;v<=n;v++)
{
for (int c = 1;c<=m;c++)
cout << Map[v][c] << ' ';
cout << endl;
}
*/
}
//cout << 3 << endl;
//cout << player[i].size() << endl;
}
if (flag <= 0)
break;
//cout << 4 << endl;
} for (int i = 1; i <= p; i++)
printf("%d ", number[i]);
printf("\n"); return 0;
}
Codeforces Round #533(Div. 2) D.Kilani and the Game的更多相关文章
- Codeforces Round #533 (Div. 2) D. Kilani and the Game(BFS)
题目链接:https://codeforces.com/contest/1105/problem/D 题意:p 个人在 n * m 的地图上扩展自己的城堡范围,每次最多走 a_i 步(曼哈顿距离),按 ...
- Codeforces Round #533 (Div. 2)题解
link orz olinr AK Codeforces Round #533 (Div. 2) 中文水平和英文水平都太渣..翻译不准确见谅 T1.给定n<=1000个整数,你需要钦定一个值t, ...
- Codeforces Round #533 (Div. 2) C.思维dp D. 多源BFS
题目链接:https://codeforces.com/contest/1105 C. Ayoub and Lost Array 题目大意:一个长度为n的数组,数组的元素都在[L,R]之间,并且数组全 ...
- Codeforces Round #533 (Div. 2)
C: 题意: 有n个整数ai,数列a有两个神奇的性质.1.所有的整数都在[l,r]范围内.2.这n个数的和能被3整除.现在给出l和r,和个数n,问你有多少种方法构造出数列a,方案数mod1e9+7. ...
- Codeforces Round #533 (Div. 2) Solution
A. Salem and Sticks 签. #include <bits/stdc++.h> using namespace std; #define N 1010 int n, a[N ...
- Codeforces Round #533 (Div. 2) C. Ayoub and Lost Array 【dp】
传送门:http://codeforces.com/contest/1105/problem/C C. Ayoub and Lost Array time limit per test 1 secon ...
- Codeforces Round #533 (Div. 2) B. Zuhair and Strings 【模拟】
传送门:http://codeforces.com/contest/1105/problem/B B. Zuhair and Strings time limit per test 1 second ...
- Codeforces Round #533(Div. 2) C.Ayoub and Lost Array
链接:https://codeforces.com/contest/1105/problem/C 题意: 给n,l,r. 一个n长的数组每个位置可以填区间l-r的值. 有多少种填法,使得数组每个位置相 ...
- Codeforces Round #533(Div. 2) B.Zuhair and Strings
链接:https://codeforces.com/contest/1105/problem/B 题意: 给一个字符串和k,连续k个相同的字符,可使等级x加1, 例:8 2 aaacaabb 则有aa ...
随机推荐
- JavaScript学习第三天
今天学习第三天. 凡事都是需要坚持的,坚持下去. 学习内容: 1.document.getElementById(""),document.getElementByTagName( ...
- 利用javascript动态创建表格
//说明:实现功能.原理上文相同.不过这次是利用已有的简单的方法创建行和列,并实现内容行鼠标移入变色功能! 效果图: /*两个方法 1. trNode table.insertRow(-1) ...
- Java 8新特性之旅:使用Stream API处理集合
在这篇“Java 8新特性教程”系列文章中,我们会深入解释,并通过代码来展示,如何通过流来遍历集合,如何从集合和数组来创建流,以及怎么聚合流的值. 在之前的文章“遍历.过滤.处理集合及使用Lambda ...
- BZOJ 1619 [Usaco2008 Nov]Guarding the Farm 保卫牧场:dfs【灌水】
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1619 题意: 给你一个n*m的地形图,位置(x,y)的海拔为h[x][y]. 一个山顶的定 ...
- codeforces A. Array 解题报告
题目链接:http://codeforces.com/problemset/problem/300/A 题目意思:给出n个数,将它们分成三批:1.所有数相乘的结果 < 0 2.所有数相乘的 ...
- RequireJS 加载 js 执行顺序
初次接触RequireJS 对文档理解不很透彻,自己通过测试测到的执行顺序: 文档结构: |-amaze | -js | -amazeui.js | -jquery.min.js | -main.js ...
- Update 出现在的问题
报错提示:之前的操作没有完成,运行deanup被打断,请先执行Cleanup方法. 正常右键点击Cleanup,如果只让默认值勾选,可能还是会报这个错.所以正确操作如下: 全部选中再点击OK,这样就可 ...
- TX1 ssh配置
执行: sudo apt-get install openssh-server 验证: sudo ps -e |grep ssh 回车-->有sshd,说明ssh服务已经启,如果没有则输入命令s ...
- zabbix server、agent安装及使用
先准备yum源,当然你有打好的rpm包那更好 [root@linux-node1 ~]# cat /etc/yum.repos.d/zabbix.repo [zabbix] name=Zabbix O ...
- PHP 时间戳
<?php php 获取今日.昨日.上周.本月的起始时间戳和结束时间戳的方法,主要使用到了 php 的时间函数 mktime.下面首先还是直奔主题以示例说明如何使用 mktime 获取今日.昨日 ...