• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
MZQ667
博客园    首页    新随笔    联系   管理    订阅  订阅

[Luogu] P1331 海战

Luogu P1331 海战


传送门

这个题大概是找图形规律。首先,因为如果"Bad placement"的话,四个格里一定会有三个是'#'。其次,如果有船的话,这一块矩形的右下角一格的右边、下边一格一定都是空的,要不然就"Bad placement"了。

#include <algorithm>
#include <iostream>
using namespace std;
int r, c, tot;
int map[1010][1010];
char tmp;
inline bool calc(int x, int y) {
    return ((map[x][y] + map[x + 1][y] + map[x][y + 1] + map[x + 1][y + 1]) == 3);
}
int main() {
    ios::sync_with_stdio(false);
    cin >> r >> c;
    for (int i = 1; i <= r; ++i)
        for (int j = 1; j <= c; ++j) {
            cin >> tmp;
            map[i][j] = tmp == '#' ? 1 : 0;
        }
    for (int i = 1; i <= r; ++i)
        for (int j = 1; j <= c; ++j) {
            if(calc(i, j)) {cout << "Bad placement.\n"; return 0;}
            if(map[i][j] && !map[i + 1][j] && !map[i][j + 1]) tot++;
        }
    cout << "There are " << tot << " ships.\n";
    return 0;
}
知识共享许可协议
本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
posted @ 2018-03-08 17:47  mzq667  阅读(196)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3