zoukankan      html  css  js  c++  java
  • East Central North America 2005——Queens, Knights and Pawns

    East Central North America 2005——Queens, Knights and Pawns

    题目来源:

    题意:

    有一个 (n imes m) 的棋盘,放置了国际象棋的骑士,士兵,皇后。每颗棋子只能走一步,士兵不能行动并作为其它棋子的障碍,问棋盘上有几个位置是安全的(不会被上述3种棋子走到)。

    题目分析:

    暴力模拟,注意只能走一步。

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <cstdio>
    #include <cmath>
    #include <vector>
    typedef long long ll;
    typedef unsigned long long ull;
    using namespace std;
    const int maxn=1111;
    char ma[maxn][maxn];
    int n,m;
    int k,x,y;
    int ans;
    int cas;
    pair<int,int> move_k[8]={{1,2},{1,-2},{2,1},{2,-1},{-1,2},{-1,-2},{-2,1},{-2,-1}};
    pair<int,int> move_q[8]={{1,0},{-1,0},{0,1},{0,-1},{1,1},{1,-1},{-1,1},{-1,-1}};
    vector<pair<int,int> > Q;
    int main()
    {
    #ifndef ONLINE_JUDGE
        //freopen("D.in","r",stdin);
        //freopen("D.out","w",stdout);
    #endif
        cas=0;
        while(~scanf("%d%d",&n,&m) && n+m)
        {
            cas++;
            ans  = 0;
            memset(ma,0,sizeof(ma));
            Q.clear();
            scanf("%d",&k);
            for(int i=0;i<k;i++)
            {
                scanf("%d%d",&x,&y);
                ma[x][y]='Q';
                Q.push_back(make_pair(x,y));
            }
            scanf("%d",&k);
            for(int i=0;i<k;i++)
            {
                scanf("%d%d",&x,&y);
                ma[x][y]='K';
                for(int i=0;i<8;i++)
                {
                    int xx = x+move_k[i].first,yy=y+move_k[i].second;
                    if(xx >=1&&xx<=n&&yy>=1&&y<=m)
                    {
                        if(ma[xx][yy]==0)
                            ma[xx][yy]='B';
                    }
                }
            }
            scanf("%d",&k);
            for(int i=0;i<k;i++)
            {
                scanf("%d%d",&x,&y);
                ma[x][y]='P';
            }
            for(int i=0;i<Q.size();i++)
            {
                int xp=Q[i].first,yp=Q[i].second;
                for(int j=0;j<8;j++)
                {
                    int xx=xp,yy=yp;
                    while(xx >=1&&xx<=n&&yy>=1&&yy<=m)
                    {
                        xx+=move_q[j].first;
                        yy+=move_q[j].second;
                        if(ma[xx][yy]=='P' || ma[xx][yy]=='K')
                            break;
                        if(ma[xx][yy] == 0)
                            ma[xx][yy]='B';
                    }
                } 
            }
            for(int i=1;i<=n;i++)
            {
                for(int j=1;j<=m;j++)
                {
                    ans += ma[i][j]==0?1:0;
                }
            }
            printf("Board %d has %d safe squares.
    ",cas,ans);
        }
        return 0;
    }
    
  • 相关阅读:
    i5ting_doc的安装和使用
    vscode—修改默认的shell
    cookie的相关知识
    这是一段有毒的js代码,求大神解释!!!
    BFC的触发条件
    替换元素与非替换元素
    css中em的使用方法
    误操作导致ps界面中的工具栏消失
    导航栏里面的li标签和a标签的配合使用
    记录一下 elmentui 循环复选框不能选中问题
  • 原文地址:https://www.cnblogs.com/Combustible-ice/p/5835811.html
Copyright © 2011-2022 走看看