QT中使用Event Filter监听按钮事件,Release后按钮不见

Accepted : 42   Submit : 122
Time Limit : 1000 MS   Memory Limit : 65536 KB

题目描述

五虎棋是流传在东北民间的一种游戏,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

Source

XTU OnlineJudge 

#include<stdio.h>
char map[7][7];
int sumx,sumo;
void find1()
{
    if(map[0][0]==map[0][4]&&map[0][0]==map[4][0])
    if(map[0][0]==map[4][4]&&map[0][0]==map[2][2])
    {
        if(map[0][0]=='x')sumx+=10;
        else sumo+=10;
    }
}
void find2()
{
    for(int i=0; i<=2; i++)
    for(int j=0; j<=2; j++)
    {
        if(map[i][j]==map[i][j+2]&&map[i][j]==map[i+2][j])
        if(map[i][j]==map[i+2][j+2]&&map[i][j]==map[i+1][j+1])
        {
            if(map[i][j]=='x')sumx+=5;
            else sumo+=5;
        }
    }
}
void find3()
{
    for(int i=0;i<=4;i++)
    {
        if(map[i][0]==map[i][1]&&map[i][0]==map[i][2])
        if(map[i][0]==map[i][3]&&map[i][0]==map[i][4])
        {
           if(map[i][0]=='x')sumx+=5;
            else sumo+=5;
        }
        if(map[0][i]==map[2][i]&&map[0][i]==map[1][i])
        if(map[0][i]==map[3][i]&&map[0][i]==map[4][i])
        {
           if(map[0][i]=='x')sumx+=5;
            else sumo+=5;
        }
    }
    if(map[0][0]==map[1][1]&&map[0][0]==map[2][2])
        if(map[0][0]==map[3][3]&&map[0][0]==map[4][4])
        {
           if(map[0][0]=='x')sumx+=5;
            else sumo+=5;
        }
    if(map[0][4]==map[1][3]&&map[0][4]==map[2][2])
        if(map[0][4]==map[3][1]&&map[0][4]==map[4][0])
        {
           if(map[0][4]=='x')sumx+=5;
            else sumo+=5;
        }
}
void find4()
{
    if(map[0][1]==map[1][2]&&map[0][1]==map[2][3]&&map[0][1]==map[3][4])
        {
           if(map[0][1]=='x')sumx+=4;
            else sumo+=4;
        }
    if(map[1][0]==map[2][1]&&map[1][0]==map[3][2]&&map[1][0]==map[4][3])
        {
           if(map[1][0]=='x')sumx+=4;
            else sumo+=4;
        }
    if(map[0][3]==map[1][2]&&map[0][3]==map[2][1]&&map[0][3]==map[3][0])
        {
           if(map[0][3]=='x')sumx+=4;
            else sumo+=4;
        }
    if(map[1][4]==map[2][3]&&map[1][4]==map[3][2]&&map[1][4]==map[4][1])
        {
           if(map[1][4]=='x')sumx+=4;
            else sumo+=4;
        }
}
void find5()
{
    if(map[0][2]==map[1][3]&&map[0][2]==map[2][4])
        {
           if(map[0][2]=='x')sumx+=3;
            else sumo+=3;
        }
    if(map[2][0]==map[3][1]&&map[2][0]==map[4][2])
        {
           if(map[2][0]=='x')sumx+=3;
            else sumo+=3;
        }
    if(map[0][2]==map[1][1]&&map[0][2]==map[2][0])
        {
           if(map[0][2]=='x')sumx+=3;
            else sumo+=3;
        }
    if(map[2][4]==map[3][3]&&map[2][4]==map[4][2])
        {
           if(map[2][4]=='x')sumx+=3;
            else sumo+=3;
        }
}
void find6()
{
    for(int i=0;i<=3;i++)
    for(int j=0;j<=3;j++)
    if(map[i][j]==map[i][j+1]&&map[i][j]==map[i+1][j]&&map[i][j]==map[i+1][j+1])
    {
        if(map[i][j]=='x')sumx+=1;
        else sumo+=1;
    }
}int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        for(int i=0;i<=4;i++)
        scanf("%s",map[i]);
        sumx=sumo=0;
        find1();    find2();     find3();
        find4();    find5();     find6();
        printf("%d %d\n",sumx,sumo);
    }
}

QT中使用Event Filter监听按钮事件,Release后按钮不见

时间: 2024-10-03 14:01:28

QT中使用Event Filter监听按钮事件,Release后按钮不见的相关文章

Qt Gui中父控件监听子控件的IO事件

父对象重新定义自己继承自QObject的函数bool eventFilter(QObject* watched, QEvent* event). 子控件安装父对象的eventFilter: 例如, QTableView * itsView = new QTableView; itsView->viewport()->installEventFilter(this); Qt Gui中父控件监听子控件的IO事件

Qt实现小功能之列表无限加载(创意很不错:监听滚动条事件,到底部的时候再new QListWidgetItem)

概念介绍 无限加载与瀑布流的结合在Web前端开发中的效果非常新颖,对于网页内容具备较好的表现形式.无限加载并没有一次性将内容全部加载进来,而是通过监听滚动条事件来刷新内容的.当用户往下拖动滚动条或使用鼠标滚轮的时候,页面会自动加载剩余的内容.如下: 简约而不简单,正是这种别出心裁,突破常规的设计才能得到用户的青睐…… 实现思路 在前端开发可以使用一些jQuery插件实现这种效果,后台只需要准备好数据就行了.在Qt中如何给列表组件(QListWidget,QTreeWidget, QTableWi

JS 中的事件绑定、事件监听、事件委托

事件绑定 要想让 JavaScript 对用户的操作作出响应,首先要对 DOM 元素绑定事件处理函数.所谓事件处理函数,就是处理用户操作的函数,不同的操作对应不同的名称. 在JavaScript中,有三种常用的绑定事件的方法: 在DOM元素中直接绑定: 在JavaScript代码中绑定: 绑定事件监听函数. 在DOM中直接绑定事件 我们可以在DOM元素上绑定onclick.onmouseover.onmouseout.onmousedown.onmouseup.ondblclick.onkeyd

简述Java中Http/Https请求监听方法

一.工欲善其事必先利其器 做Web开发的人总免不了与Http/Https请求打交道,很多时候我们都希望能够直观的的看到我们发送的请求参数和服务器返回的响应信息,这个时候就需要借助于某些工具啦.本文将采用Fiddler2作为分析工具,Fiddler很强大,它能记录所有客户端和服务器的http和https请求,允许你监视,设置断点,甚至修改输入输出数据,是越墙抓包之利器.关于工具的介绍可以参考下面的链接: http://www.cnblogs.com/TankXiao/archive/2012/02

在Javascript中监听flash事件(转)

在Javascript中监听flash事件,其实有两种做法: 1.在特定的环境下(例如专门制作的flash),大家约定一个全局函数,然后在flash的事件中用ExternalInterface.call调用这个全局函数即可.2.在非特定的环境下(例如编写通用的flash插件),是不能限制用户的函数名的,所以根本无法约定全局函数:是否可以通过类似js的回调函数的形式实现事件监听呢? 其实js与flash的通信,一般情况下可以进行一些比较简单的通信,如传递基本的数据类型.传递简单的对象.调用函数等,

设置UITableView背景透明/监听cell左边的删除按钮的点击事件

_tableView = [[UITableView alloc] init]; _tableView.delegate = self; _tableView.dataSource = self; _tableView.frame = CGRectMake(kZero, 66, kScreenW, kScreenH - 66 - 70); //设置列表为透明背景 UIImage *image = [MusicManager createImageWithColor:[UIColor clearC

Unity中利用委托与监听解耦合的思路

这篇随笔是一篇记录性的随笔,记录了从http://www.sikiedu.com/my/course/304,这门课程中学到的内容,附带了一些自己的思考. 一.单例模式的应用 首先假想一种情况,现在需要有一个按钮和一个Text,当按下按钮时,Text上显示“你好”两个字. 一个最常见的方法是在按钮下挂载一个脚本BtnClick,它持有一个Text组件,它由外部的Text拖入来赋值. 在初始化时BtnClick会获取当前游戏物体下的Button组件并为其添加监听,当按下按钮时会修改Text组件中的

JS 事件绑定、事件监听、事件委托详细介绍

事件绑定 要想让 JavaScript 对用户的操作作出响应,首先要对 DOM 元素绑定事件处理函数.所谓事件处理函数,就是处理用户操作的函数,不同的操作对应不同的名称. 在JavaScript中,有三种常用的绑定事件的方法: 在DOM元素中直接绑定: 在JavaScript代码中绑定: 绑定事件监听函数. 在DOM中直接绑定事件 我们可以在DOM元素上绑定onclick.onmouseover.onmouseout.onmousedown.onmouseup.ondblclick.onkeyd

原 JS监听回车事件

原 JS监听回车事件 发表于2年前(2014-06-04 10:16)   阅读(6101) | 评论(0) 11人收藏此文章, 我要收藏 赞0 1月16日厦门 OSC 源创会火热报名中,奖品多多哦   JS监听某个输入框 ? 1 2 3 4 5 6 7 //回车事件绑定     $('#search_input').bind('keyup', function(event) {         if (event.keyCode == "13") {             //回车