链接:https://ac.nowcoder.com/acm/contest/80259/B
来源:牛客网
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
小红来到了地下城的一个房间,房间被分成 n 行 m 列的格子,小红站在其中一个格子上,她可以向一个方向攻击整条直线的所有格子(小红不能改变自己的位置和朝向)。
小红想知道,自己可以攻击到多少只怪物?
输入描述:
第一行输入两个正整数n,m,代表矩阵的行数和列数。
接下来的 n 行,每行输入一个字符串,代表矩阵。字符串仅由 ‘ . ’、' * ' 和大写字母组成。其中 ' . ' 代表空地,' * ' 代表该格子上有一只怪物。大写字母有且仅有一个,且为 ' W '、' S '、' A '、' D ' 中的一种,代表小红面朝的方向。' W' 代表向上,' S ' 代表向下,' A ' 代表向左,' D ' 代表向右。
1 ≤ n, m ≤ 1000
输出描述:
小红可以攻击到的怪物数量。
输入
4 5
..***
.****
**.**
*.*A*
输出
2
说明
小红向左攻击,可以攻击到两个怪物。
解答
#include <iostream>
using namespace std;
const int N = 1010;
// cnt1 统计当前点左边的数
// cnt2 统计当前点上边的数
// cnt1[i]++ 也就是当前点横坐标加加,也就统计出横轴的数
// cnt2[j]++ 也就是当前点纵坐标加加,也就统计出纵轴的数
int cnt1[N], cnt2[N];
int ans;
int main()
{
int n, m;
char c;
cin >> n >> m;
int f1 = -1;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
{
cin >> c;
if (c == '*') cnt1[i]++, cnt2[j]++;
if (c == 'A') ans = cnt1[i];
if (c == 'D') ans = i, f1 = 1, cnt1[i] = 0;
if (c == 'W') ans = cnt2[j];
if (c == 'S') ans = j, f1 = 2, cnt2[j] = 0;
}
if (f1 == -1) cout << ans << endl;
if (f1 == 1) cout << cnt1[ans] << endl;
if (f1 == 2) cout << cnt2[ans] << endl;
}
标签:妙用,遍历,f1,int,++,cnt2,cnt1,ans,统计
From: https://www.cnblogs.com/xingzhuz/p/18135733