XTU1173:Five Tiger(模拟)

题目描述

五虎棋是流传在东北民间的一种游戏,GG小的时候,经常被表哥虐得很惨。

由于各个地区的规则可能不大相同,并且GG的回忆不一定很准,所以,如果规则和你平常玩的的有冲突,请以这里为主。

棋盘是横五条,纵五条直线,形成25个交叉点,双方轮流把棋子放到交叉点上 (由于所需各自和棋子数目不多,才12+13,GG小的时候,用的是象棋的棋盘和棋子,真的用大棋盘很爽~~~)

当双方把棋盘下满之后(先手下了13个棋子,后手下了12个棋子),根据双方摆成的阵型来算分。 (当然,算分之后,还有提掉对方相应个数的棋子,然后棋子一格一格的挪动,继续形成阵型,提掉对方的棋子神码的,GG表述不明白,也就不再后续问题上出题了)

现在GG想让你帮忙算,双方摆成的阵型,分别得分多少?

其中记分的阵型有(用o表示棋子落点)

大五虎(10分)

要求占据了四个角落和最中间的位置

o...o
.....
..o..
.....
o...o

五虎(5分):

摆成形如下图的阵势

o.o
.o.
o.o

通天(5分):

横着/竖着/斜着 五个棋子连成一条直线,如

.....	..o..	o....
ooooo	..o..	.o...
.....	..o..	..o..
.....	..o..	...o.
.....	..o..	....o

四斜(4分):

严格定义,GG说不明白,总之只有以下四种

...o.	.....	.....	.o...
..o..	o....	....o	..o..
.o...	.o...	...o.	...o.
o....	..o..	..o..	....o
.....	...o.	.o...	.....

三斜(3分):

严格定义,GG说不明白,总之只有以下四种

..o..	.....	.....	..o..
.o...	.....	.....	...o.
o....	o....	....o	....o
.....	.o...	...o.	.....
.....	..o..	..o..	.....

小斗(1分):

四个棋子形成一个最小正方形

oo
oo

例1

o...o
.o.o.
..o..
.oooo
o..oo

o这名玩家形成了 1个大五虎(10分), 1个小五虎(5分), 2个通天(10分), 1个小斗(1分). 总分:10 + 5 + 10*2 + 1 = 36

例2

.o.o.
o.o.o
.o.o.
o.o.o
.o.o.

o这名玩家形成了 4个小五虎, 4个四斜 总分 5*4 + 4*4 = 36

输入

多组测试数据。首先是一个整数T ( 1 ≤ T ≤ 10000 ),占一行,表示测试数据的组数.

对于每组测试数据,占6行。 首先是一个空行 接下来的五行,表示一个局势。 也就是说,每行5个字符(x表示先手, o表示后手,也就是说,会有13个x和12个o)

输出

对于每组测试数据,输出一行. 结果为两个整数,之间用一个空格隔开,分别表示先手(x)的得分,和后手(o)的得分。

样例输入

2

oxxxo
xoxox
xxoxx
xoooo
oxxoo

xoxox
oxoxo
xoxox
oxoxo
xoxox

样例输出

9 26
57 36

简单模拟

#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;

char mat[10][10];
int map[10][10];

int big_five(int r)
{
    if(map[0][0] == r && map[0][4] == r && map[2][2] == r && map[4][0] == r && map[4][4] == r)
        return 10;
        return 0;
}

int five(int r)
{
    int i,j,sum = 0;
    for(i = 0; i<=2; i++)
    {
        for(j = 0; j<=2; j++)
        {
            if(map[i][j] == r && map[i][j+2] == r && map[i+1][j+1] == r && map[i+2][j] == r && map[i+2][j+2] == r)
                sum+=5;
        }
    }
    return sum;
}

int air(int r)
{
    int i,sum = 0;
    for(i = 0; i<5; i++)
        if(map[i][0]==r && map[i][1] == r && map[i][2] == r && map[i][3] == r && map[i][4] == r)
            sum+=5;
    for(i = 0; i<5; i++)
        if(map[0][i]==r && map[1][i] == r && map[2][i] == r && map[3][i] == r && map[4][i] == r)
            sum+=5;
    for(i = 0; i<5; i++)
        if(map[i][i]!=r)
            break;
    if(i == 5)
        sum+=5;
    if(map[0][4] == r && map[1][3] == r && map[2][2] == r && map[3][1] == r && map[4][0] == r)
        sum+=5;
    return sum;
}

int four(int r)
{
    int sum = 0;
    if(map[0][3] == r && map[1][2] == r && map[2][1] == r && map[3][0] == r)
        sum+=4;
    if(map[1][0] == r && map[2][1] == r && map[3][2] == r && map[4][3] == r)
        sum+=4;
    if(map[1][4] == r && map[2][3] == r && map[3][2] == r && map[4][1] == r)
        sum+=4;
    if(map[0][1] == r && map[1][2] == r && map[2][3] == r && map[3][4] == r)
        sum+=4;
    return sum;
}

int three(int r)
{
    int sum = 0;
    if(map[0][2] == r && map[1][1] == r && map[2][0] == r)
        sum+=3;
    if(map[2][0] == r && map[3][1] == r && map[4][2] == r)
        sum+=3;
    if(map[2][4] == r && map[3][3] == r && map[4][2] == r)
        sum+=3;
    if(map[0][2] == r && map[1][3] == r && map[2][4] == r)
        sum+=3;
    return sum;
}

int small(int r)
{
    int i,j,sum = 0;
    for(i = 0; i<=3; i++)
    {
        for(j = 0; j<=3; j++)
        {
            if(map[i][j] == r && map[i][j+1] == r && map[i+1][j] == r && map[i+1][j+1] == r)
                sum+=1;
        }
    }
    return sum;
}

int main()
{
    int t,i,j;
    scanf("%d",&t);
    while(t--)
    {
        memset(map,0,sizeof(map));
        for(i = 0; i<5; i++)
        {
            scanf("%s",mat[i]);
            for(j = 0; j<5; j++)
                if(mat[i][j] == 'x')
                    map[i][j] = 1;
        }
        int sum1 = 0,sum2 = 0;
        sum1+=big_five(1);
        sum2+=big_five(0);
        sum1+=five(1);
        sum2+=five(0);
        sum1+=air(1);
        sum2+=air(0);
        sum1+=four(1);
        sum2+=four(0);
        sum1+=three(1);
        sum2+=three(0);
        sum1+=small(1);
        sum2+=small(0);
        printf("%d %d\n",sum1,sum2);
    }

    return 0;
}

XTU1173:Five Tiger(模拟),布布扣,bubuko.com

时间: 2024-10-26 05:50:32

XTU1173:Five Tiger(模拟)的相关文章

XTU 1173Five Tiger(模拟)

Accepted : 42   Submit : 122 Time Limit : 1000 MS   Memory Limit : 65536 KB 题目描述 五虎棋是流传在东北民间的一种游戏,GG小的时候,经常被表哥虐得很惨. 由于各个地区的规则可能不大相同,并且GG的回忆不一定很准,所以,如果规则和你平常玩的的有冲突,请以这里为主. 棋盘是横五条,纵五条直线,形成25个交叉点,双方轮流把棋子放到交叉点上 (由于所需各自和棋子数目不多,才12+13,GG小的时候,用的是象棋的棋盘和棋子,真的

2013湘潭赛

XTU1168 Alice and Bob 因为数据只有10000范围,直接递推就可以了 #include<stdio.h> #include<string.h> #include<vector> #include<list> #include<deque> #include<queue> #include<stack> #include<map> #include<set> #include<

XTUOJ 1173 Five Tiger(模拟)

 Five Tiger Accepted : 34   Submit : 107 Time Limit : 1000 MS   Memory Limit : 65536 KB 题目描述 五虎棋是流传在东北民间的一种游戏,GG小的时候,经常被表哥虐得很惨. 由于各个地区的规则可能不大相同,并且GG的回忆不一定很准,所以,如果规则和你平常玩的的有冲突,请以这里为主. 棋盘是横五条,纵五条直线,形成25个交叉点,双方轮流把棋子放到交叉点上 (由于所需各自和棋子数目不多,才12+13,GG小的时候,

模拟行迁移试验

1.创建scott模式 [[email protected] dbs]$ sqlplus '/as sysdba' SQL*Plus: Release 10.2.0.1.0 - Production on Mon Feb 17 14:59:02 2014 Copyright (c) 1982, 2005, Oracle. All rights reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0

ORACLE模拟临时文件、日志成员、口令文件丢失情况与恢复【weber出品】

一.临时表空间文件.日志文件和口令文件都属于非关键性文件,因为这些文件丢失后并不会影响到整个数据库的完整性. 但是,当这些文件丢失后我们需要快速的找回这些文件.接下来我将模拟临时表空间文件.日志文件和口令文件丢失的情况. 二.如果属于 TEMP 表空间的临时文件丢失或损坏,则 TEMP 表空间将不可用.例如:在执行需要 TEMP 空间进行排序的 SQL 语句过程中,此问题将声明其为错误. 一般会用到临时表空间的场景有: 索引create或rebuild Order by 或 group by D

模拟业务最小测试用例02

Oracle数据库对很多开发人员而言,基本就只是一个存储数据的仓库,只不过这个仓库功能非常强大,额外提供了很多好用的功能,需要的时候会用就好,不会纠结于某个细节.而对很多DBA而言,正好相反,喜欢沉溺于某些细节上,对某些小知识点对应的原理理解的非常透彻,但却往往很少会站在开发层面认识Oracle. 本文旨在构造一份相对较全面的测试数据,对开发常用的对象都模拟创建一份测试用例,DBA就可以直接拿去做一些基本测试. 环境:Oracle 11.2.0.4 1.初始化测试数据 2.清空测试数据 1.初始

CentOS系统启动及内核大破坏模拟实验

讲过了centos的启动流程,此时是不是想来点破坏呢?那就尽情的玩耍吧,记得在实验之前拍个快照,万一哪个环节错误恢复不回来了呢,毕竟数据无价,话不多说,开始. 一.删除伪系统根.(ramdisk文件) (1)模拟误操作删除ramdisk文件. ①模拟误删除initramfs-3.10.0-514.el7.x86_64.img文件. ②为当前正在使用的内核重新制作ramdisk文件 格式为:mkinitrd /boot/initramfs-$(uname -r).img $(uname -r) (

NYOJ 2356: 哈希计划【模拟】

题目描述 众所周知,LLM的算法之所以菜,就是因为成天打游戏,最近LLM突然想玩<金庸群侠传X>,结果进去后各种被虐,LLM就开始研究这个游戏的代码,顺便还学会了一点点点点lua语言,然后就开始了伟大的改游戏代码之旅,然后LLM发现自己too young了,这个游戏把所有的文本都进行了哈希,如果自己改了代码或者剧情文本的话它哈希出来的值就会和原来的哈希值不一样......然后游戏就会打不开.....,现在LLM发现了文本的哈希函数,要求你写个程序,功能为: 输入一段字符串,输出一个哈希值 为了

爬虫——模拟点击动态页面

动态页面的模拟点击: 以斗鱼直播为例:http://www.douyu.com/directory/all 爬取每页的房间名.直播类型.主播名称.在线人数等数据,然后模拟点击下一页,继续爬取 #!/usr/bin/python3 # -*- conding:utf-8 -*- __author__ = 'mayi' """ 动态页面的模拟点击: 模拟点击斗鱼直播:http://www.douyu.com/directory/all 爬取每页房间名.直播类型.主播名称.在线人数