HDU 4121
http://www.bnuoj.com/v3/problem_show.php?pid=10277
- //#pragma comment(linker, "/STACK:16777216") //for c++ Compiler
- #include <stdio.h>
- #include <iostream>
- #include <climits>
- #include <cstring>
- #include <cmath>
- #include <stack>
- #include <vector>
- #include <algorithm>
- #define ll long long
- using namespace std;
- const int INF = 0x3f3f3f3f;
- const int MAXN = ;
- const int row = ;
- const int col = ;
- int map[][];
- int G_x, G_y, pos_x, pos_y;
- bool ans;
- bool deal(int x, int y){
- return (x >= && x <= row && y >= && y <= col);
- }
- bool deal_plus(int x, int y){
- if(deal(x, y) && x <= && y >= && y <= ) return true;
- return false;
- }
- void init(){
- ans = false;
- memset(map, , sizeof(map));
- }
- bool shuai(int x, int y){
- int i, j;
- if(x - < pos_x) return false;
- for(i = x - ; i >= pos_x; --i){
- if(map[i][y]) break;
- }
- if(map[i][y] == ) return true;
- return false;
- }
- bool ju(int x, int y){
- int i, j;
- for(i = x + ; i <= pos_x; ++i){
- if(x + > pos_x) break;
- if(map[i][y]){
- if(map[i][y] == ) return true;
- else break;
- }
- }
- for(i = x - ; i >= ; --i){
- if(x - < ) break;
- if(map[i][y]){
- if(map[i][y] == ) return true;
- else break;
- }
- }
- for(j = y - ; j >= ; --j){
- if(y - < ) break;
- if(map[x][j]){
- if(map[x][j] == ) return true;
- else break;
- }
- }
- for(j = y + ; j <= col; ++j){
- if(y + > col) break;
- if(map[x][j]){
- if(map[x][j] == ) return true;
- else break;
- }
- }
- return false;
- }
- bool pao(int x, int y){
- bool flag = false;
- int i, j;
- for(i = x + ; i <= pos_x; ++i){
- if(x + > pos_x) break;
- if(flag){
- if(map[i][y] == ) return true;
- else break;
- } else if(map[i][y]){
- flag = true;
- }
- }
- flag = false;
- for(i = x - ; i >= ; --i){
- if(x - < ) break;
- if(flag){
- if(map[i][y] == ) return true;
- else break;
- } else if(map[i][y]){
- flag = true;
- }
- }
- flag = false;
- for(j = y - ; j >= ; --j){
- if(y - < ) break;
- if(flag){
- if(map[x][j] == ) return true;
- else break;
- } else if(map[x][j]){
- flag = true;
- }
- }
- flag = false;
- for(j = y + ; j <= col; ++j){
- if(y + > col) break;
- if(flag){
- if(map[x][j] == ) return true;
- else break;
- } else if(map[x][j]){
- flag = true;
- }
- }
- return false;
- }
- bool ma(int x, int y){
- int xx, yy;
- xx = x + ; yy = y - ;
- if(xx == pos_x && yy == pos_y && map[x + ][y] == ) return true;
- xx = x + ; yy = y + ;
- if(xx == pos_x && yy == pos_y && map[x + ][y] == ) return true;
- xx = x + ; yy = y + ;
- if(xx == pos_x && yy == pos_y && map[x][y + ] == ) return true;
- xx = x - ; yy = y + ;
- if(xx == pos_x && yy == pos_y && map[x][y + ] == ) return true;
- xx = x - ; yy = y + ;
- if(xx == pos_x && yy == pos_y && map[x - ][y] == ) return true;
- xx = x - ; yy = y - ;
- if(xx == pos_x && yy == pos_y && map[x - ][y] == ) return true;
- xx = x - ; yy = y - ;
- if(xx == pos_x && yy == pos_y && map[x][y - ] == ) return true;
- xx = x + ; yy = y - ;
- if(xx == pos_x && yy == pos_y && map[x][y - ] == ) return true;
- return false;
- }
- bool beat(int x, int y){
- int i, j;
- if(x + > row) return false;
- for(i = x + ; i <= row; ++i){
- if(map[i][y]) break;
- }
- if(map[i][y] == ) return true;
- return false;
- }
- bool solve(){
- int i, j;
- for(i = ; i <= row; ++i){
- for(j = ; j <= col; ++j){
- if(map[i][j] == )
- if(shuai(i, j)) return true;
- if(map[i][j] == )
- if(ju(i, j)) return true;
- if(map[i][j] == )
- if(pao(i, j)) return true;
- if(map[i][j] == )
- if(ma(i, j)) return true;
- }
- }
- return false;
- }
- int main(){
- int i, j, t;
- char cc;
- while(cin >> t >> G_x >> G_y){
- if(t == && G_x == && G_y == ) break;
- init();
- map[G_x][G_y] = ;
- while(t--){
- cin >> cc >> pos_x >> pos_y;
- if(cc == 'G'){
- map[pos_x][pos_y] = ;
- } else if(cc == 'R'){
- map[pos_x][pos_y] = ;
- } else if(cc == 'C'){
- map[pos_x][pos_y] = ;
- } else if(cc == 'H'){
- map[pos_x][pos_y] = ;
- }
- }
- if(beat(G_x, G_y)){
- ans = false;
- }
- else{
- if(deal_plus(G_x - , G_y)){
- map[G_x][G_y] = ;
- int temp_num = map[G_x - ][G_y];
- map[G_x - ][G_y] = ;
- pos_x = G_x - ;
- pos_y = G_y;
- if(solve()){
- ans = true;
- }
- else{
- printf("NO\n");
- continue;
- }
- map[G_x - ][G_y] = temp_num;
- map[G_x][G_y] = ;
- }
- if(deal_plus(G_x + , G_y)){
- map[G_x][G_y] = ;
- int temp_num = map[G_x + ][G_y];
- map[G_x + ][G_y] = ;
- pos_x = G_x + ;
- pos_y = G_y;
- if(solve()){
- ans = true;
- }
- else{
- printf("NO\n");
- continue;
- }
- map[G_x + ][G_y] = temp_num;
- map[G_x][G_y] = ;
- }
- if(deal_plus(G_x, G_y - )){
- map[G_x][G_y] = ;
- int temp_num = map[G_x][G_y - ];
- map[G_x][G_y - ] = ;
- pos_x = G_x;
- pos_y = G_y - ;
- if(solve()){
- ans = true;
- }
- else{
- printf("NO\n");
- continue;
- }
- map[G_x][G_y - ] = temp_num;
- map[G_x][G_y] = ;
- }
- if(deal_plus(G_x, G_y + )){
- map[G_x][G_y] = ;
- int temp_num = map[G_x][G_y + ];
- map[G_x][G_y + ] = ;
- pos_x = G_x;
- pos_y = G_y + ;
- if(solve()){
- ans = true;
- }
- else{
- printf("NO\n");
- continue;
- }
- map[G_x][G_y + ] = temp_num;
- map[G_x][G_y] = ;
- }
- }
- if(ans){
- printf("YES\n");
- } else{
- printf("NO\n");
- }
- }
- return ;
- }
HDU 4121的更多相关文章
- HDU 4121 Xiangqi 模拟题
Xiangqi Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4121 ...
- HDU 4121 Xiangqi (算是模拟吧)
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4121 题意:中国象棋对决,黑棋只有一个将,红棋有一个帅和不定个车 马 炮冰给定位置,这时当黑棋走,问你黑 ...
- HDU 4121 Xiangqi --模拟
题意: 给一个象棋局势,问黑棋是否死棋了,黑棋只有一个将,红棋可能有2~7个棋,分别可能是车,马,炮以及帅. 解法: 开始写法是对每个棋子,都处理处他能吃的地方,赋为-1,然后判断将能不能走到非-1的 ...
- HDU 4121 Xiangqi 我老了?
Xiangqi Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...
- HDU 4121 Xiangqi
模拟吧,算是... 被这个题wa到哭,真是什么都不想说了...上代码 #include <iostream> #include <cstring> using namespac ...
- HDOJ 2111. Saving HDU 贪心 结构体排序
Saving HDU Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 【HDU 3037】Saving Beans Lucas定理模板
http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...
- hdu 4859 海岸线 Bestcoder Round 1
http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...
- HDU 4569 Special equations(取模)
Special equations Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
随机推荐
- 记NOIP分数出来前
咩~成绩还没有出来呢!但是拿到了每个人的程序,还有一堆民间的数据.我测了好多不同的数据,基本上D1T1,D2T1,D2T2的都是暴力解决掉的,没有什么问题,唯一就是D1T2的link那一题,写的时候2 ...
- java学习之jdbc的封装
jdbc是连接数据库必不可少的工具,但每次连接都要重新写一遍太麻烦了,也不利于代码的可读性,这里做一个工具类进行封装. package com.gh; import java.sql.Connecti ...
- hdoj 3549 Flow Problem(最大网络流)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3549 思路分析:该问题为裸的最大网络流问题,数据量不大,使用EdmondsKarp算法求解即可:需要注 ...
- 数学之路-python计算实战(16)-机器视觉-滤波去噪(邻域平均法滤波)
# -*- coding: utf-8 -*- #code:myhaspl@myhaspl.com #邻域平均法滤波,半径为2 import cv2 import numpy as np fn=&qu ...
- 自动分组+合并完整的sql脚本
BEGIN#前提:指定字符串长度为8字符定长#逻辑:循环8次,比对2个字符串相同索引位置下的数值大小,并取结果最大值.#示例:merge1(输入参数source1,输入参数source2,输出结果re ...
- A.归并排序
归并排序 (求逆序数) 归并排序:递归+合并+排序 时间复杂度:O(n logn) 空间复杂度:O(n) 用途:1.排序 2.求逆序对数 Description In this problem ...
- C++对C语言的非面向对象特性扩充(3)
今天要讲的是C++作用域运算符"::",强制类型转换的扩充,C++中相对于C中malloc和free函数的运算符new和delete,以及C++对C的一个重要扩充:引用(refer ...
- c++实现二分查找
简要描述: 二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好:其缺点是要求待查表为有序表,且插入删除 困难. 条件:查找的数组必须要为有序数组. 二分查找的过程剩简要描述如下图: 二种实 ...
- win7 64下安装mysql-python报错的解决办法
最近要使用django进行项目开发,需要使用mysql-python模块. 在本地搭建环境安装的时候却出现报错,Unable to find vcvarsall.bat 在网上找了很多资料,发现是w ...
- Spring注解配置
配置文件: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http:// ...