poj 4001 Xiangqi 模拟 顺带关于模拟的一番吐槽

简介:

  很多人都觉得模拟题很恶心,各种长代码。但其实我觉得模拟题是最有美感的一类题,求同存异在模拟中表现的淋漓尽致。

  遇到模拟题,不应急于下笔,应首先分析问题共性,抽象出相同的模型。代码尽量重用。

  其次寻找stl中合适的数据结构,实在没有再进行手写。因为模拟题范围一般不大,stl完全可以接受,而且完全面向对象的想法非常适合模拟各种行为

  最后再按模块编码,实现目标。

  模拟的过程应该是很简约,具有美感高度抽象的,而绝非杂乱无章,各种复制粘贴的

/*
author:jxy
lang:C/C++
university:China,Xidian University
**If you need to reprint,please indicate the source**
*/
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
using namespace std;
char org[11][10];
const int x[4]={1,0,-1,0};
const int y[4]={0,1,0,-1};
bool killed(int X,int Y)
{
    bool nemp;
    int i;
    int tx,ty,xx,yy;
    for(i=0;i<4;i++)
    {
        tx=X+x[i];ty=Y+y[i];
        nemp=false;
        if(x[i]) //判断马
        {
            xx=tx+x[i];
            if((org[tx][ty-1]==0&&org[xx][ty-1]=='H')||(org[tx][ty+1]==0&&org[xx][ty+1]=='H'))return 1;
        }
        else
        {
            yy=ty+y[i];
            if((org[tx-1][ty]==0&&org[tx-1][yy]=='H')||(org[tx+1][ty]==0&&org[tx+1][yy]=='H'))return 1;
        }
        while(tx>=1&&tx<=10&&ty>=1&&ty<=9) //判断单向
        {
            if((!nemp&&(org[tx][ty]=='R'||org[tx][ty]=='G'))||(nemp&&org[tx][ty]=='C'))return 1;
            if(org[tx][ty]!=0)
            {
                if(nemp)break;
                nemp=true;
            }
            tx+=x[i]; ty+=y[i];
        }
    }
    return 0;

}
int main()
{
    int n,X,Y;
    while(~scanf("%d%d%d",&n,&X,&Y)&&n+X+Y)
    {
        int i,tx,ty;
        char c;
        memset(org,0,sizeof(org));
        for(i=0;i<n;i++)
        {
            scanf(" %c%d%d",&c,&tx,&ty);
            org[tx][ty]=c;
        }
        bool ok=false;
        for(i=0;i<4;i++)
        {
            tx=X+x[i];ty=Y+y[i];
            if(tx<1||tx>3||ty<4||ty>6)continue;
            if(killed(tx,ty)==0)ok=true;
        }
        printf("%s\n",ok?"NO":"YES");
    }
}



目录
相关文章
|
7月前
|
机器人
【每日一题Day270】LC874模拟行走机器人 | 哈希表+模拟
【每日一题Day270】LC874模拟行走机器人 | 哈希表+模拟
49 0
|
Java
微信红包的模拟代码
微信红包的模拟代码
140 1
|
7月前
【错题集-编程题】春游(模拟 - 分情况讨论)
【错题集-编程题】春游(模拟 - 分情况讨论)
|
前端开发 测试技术 芯片
【前端验证】关于那道经典概率题,用UVM环境来仿真下是男孩的概率
【前端验证】关于那道经典概率题,用UVM环境来仿真下是男孩的概率
|
存储 机器人 C++
leetcode 每日一题 874. 模拟行走机器人 c++模拟解法
简单来说就是机器人在一个矩阵上移动 我们要找到一个离原点的一个最大欧式距离的平方
141 0
|
7月前
(模拟)L1-019. 谁先倒(2016)
(模拟)L1-019. 谁先倒(2016)
50 1
poj 1068 模拟
大概题意就是告诉你有个n个小括号,每一个“)”左边有多少个“(”都告诉你了,然后让你求出每一对括号之间有多少对括号(包含自己本身)。 思路: 我先计算每个“)”左边有多少个“(”要匹配,然后每遇到一个“)”,然后向前寻找第一个可以匹配的“(”,找到后将其数量减一,这样的话在寻找的过程中经过了几个“)”就表示这对括号里面有多少括号。
30 0
上机实验9 多线程案例
上机实验9 多线程案例
69 0
|
存储
上机实验6 集合案例
上机实验6 集合案例
123 0
模拟双色球小程序
模拟双色球小程序