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");
    }
}



目录
相关文章
|
13天前
|
存储 算法 数据挖掘
【模拟面试问答】力扣165题:比较版本号(逐个比较与双指针法详解及模拟面试问答)
【模拟面试问答】力扣165题:比较版本号(逐个比较与双指针法详解及模拟面试问答)
|
1月前
(模拟)L1-019. 谁先倒(2016)
(模拟)L1-019. 谁先倒(2016)
26 1
|
11月前
|
存储 机器人 C++
leetcode 每日一题 874. 模拟行走机器人 c++模拟解法
简单来说就是机器人在一个矩阵上移动 我们要找到一个离原点的一个最大欧式距离的平方
104 0
|
6月前
|
算法 测试技术 C#
C++前缀和算法的应用:石头游戏 VIII 原理源码测试用例
C++前缀和算法的应用:石头游戏 VIII 原理源码测试用例
|
8月前
poj 1068 模拟
大概题意就是告诉你有个n个小括号,每一个“)”左边有多少个“(”都告诉你了,然后让你求出每一对括号之间有多少对括号(包含自己本身)。 思路: 我先计算每个“)”左边有多少个“(”要匹配,然后每遇到一个“)”,然后向前寻找第一个可以匹配的“(”,找到后将其数量减一,这样的话在寻找的过程中经过了几个“)”就表示这对括号里面有多少括号。
16 0
|
存储 编译器 C语言
【C】函数真的难嘛?其实一点也不难,原理很简单。
# 什么是函数 程序是由多个零件组合而成的,而函数就是这种“零件”的一个较小单位。 ## main函数和库函数 C语言程序中,main函数是必不可少的。程序运行的时候,会执行main函数的主题部分。main函数中使用了printf、scanf、puts等函数。由C语言提供的这些为数众多的函数称为库函数。 ## 什么是函数 当然,我们也可以自己创建函数。而实际上,我们也必须亲自动手创建各种函数。下面我们来自己创建一个简单的函数。 创建一个函数,接收两个整数参数,返回较大整数的值。 printf函数和scanf函数等创建得比较好得函数,即使不知道其内容,只要了解使用方法,也可以轻松使用。 ## 函
|
12月前
|
小程序
模拟双色球小程序
模拟双色球小程序
|
设计模式 存储 算法
【c++】:“无敌的适配器来咯“栈和队列模拟实现以及优先级队列的模拟实现。
【c++】:“无敌的适配器来咯“栈和队列模拟实现以及优先级队列的模拟实现。
44 0
|
设计模式 前端开发
第45/90步《前端篇》第9章 重构游戏对象等 第26课
今天学习《前端篇》第9章 重构游戏对象等 第26课 设计模式重构一:单例模式、观察者模式和组合模式
41 0
|
设计模式 前端开发
第46/90步《前端篇》第9章 重构游戏对象等 第27课
今天学习《前端篇》第9章 重构游戏对象等 第27课 设计模式重构二:模板方法模式、职责链模式和简单工厂模式
36 0