AYIT2017暑假集训第二周周三赛 G - Five-In-a-Row CodeForces - 825B

本文介绍了一种判断五子棋游戏中玩家是否能在下一步赢得比赛的算法。通过分析棋盘状态,该算法能确定玩家是否有机会通过放置棋子形成长度至少为五的连续线。

Alice and Bob play 5-in-a-row game. They have a playing field of size10 × 10. In turns they put either crosses or noughts, one at a time. Alice puts crosses and Bob puts noughts.

In current match they have made some turns and now it's Alice's turn. She wonders if she can put cross in such empty cell that she wins immediately.

Alice wins if some crosses in the field form line of length not smaller than 5. This line can be horizontal, vertical and diagonal.

Input

You are given matrix 10 × 10 (10 lines of 10 characters each) with capital Latin letters 'X' being a cross, letters 'O' being a nought and '.' being an empty cell. The number of 'X' cells is equal to the number of 'O' cells and there is at least one of each type. There is at least one empty cell.

It is guaranteed that in the current arrangement nobody has still won.

Output

Print 'YES' if it's possible for Alice to win in one turn by putting cross in some empty cell. Otherwise print 'NO'.

Example
Input
XX.XX.....
.....OOOO.
..........
..........
..........
..........
..........
..........
..........
..........
Output
YES
Input
XXOXX.....
OO.O......
..........
..........
..........
..........
..........
..........
..........
..........
Output
NO
这道题就是问x可不可以连成五个,可以输出YES,不行输出NO。写的有些长了,等过几天再写个短的
#include<stdio.h>
#include<string.h>
char map1[20][20];//存放棋盘
int main()
{
    while(~scanf("%s",map1[0]))//输入棋盘
    {
        int flag=0;
        for(int i=1; i<10; i++)
            scanf("%s",map1[i]);
        for(int i=0; i<10; i++)
        {
            for(int j=0; j<10; j++)
            {
                if(map1[i][j]=='X')//当找到棋子x时,对周围进行搜索
                {
                    int gs=1,d=0;//gs代表找到的棋子数,因为有xx.xx等这样的情况存在,所以设置一个变量,使得黑棋与黑棋之间可以隔一个
                    for(int k=j+1; k<10; k++)//发现以后向左寻找
                    {
                        if(map1[i][k]=='O')//如果遇到白棋则说明这个方向上是肯定组不成五个了所以跳出这个方向
                            break;
                        else if(map1[i][k]=='.')//如果是.则点可以把黑棋分成两半,所以用d来记录点的个数
                        {
                            d++;
                            if(d>1) break;//如果点多于一个则肯定连不上
                            gs++;//因为要在点处放旗子,所以也要记录,相当于在那里放了一个黑棋子
                        }
                       else if(map1[i][k]=='X')//找到棋子,gs++;
                            gs++;
                        if(gs==5)//当找到的棋子数为伍时,则输出yes,退出程序。
                        {
                            printf("YES\n"); flag=1; return 0;
                        }
                    }
                    gs=1,d=0;//每次寻找都把棋子数和点数重置
                    for(int k=j-1; k>=0; k--)//向右寻找
                    {
                        if(map1[i][k]=='O')
                            break;
                        else if(map1[i][k]=='.')
                        {
                            d++;
                            if(d>1)
                                break;
                            gs++;
                        }
                        else if(map1[i][k]=='X')
                            gs++;
                        if(gs==5)
                        {
                            printf("YES\n");
                            flag=1;
                            return 0;
                        }
                    }
                    gs=1,d=0;
                    for(int k=i+1; k<10; k++)//向下寻找
                    {
                        if(map1[k][j]=='O')
                            break;
                        else if(map1[k][j]=='.')
                        {
                            d++;
                            if(d>1)
                                break;
                            gs++;
                        }
                        else if(map1[k][j]=='X')
                            gs++;
                        if(gs==5)
                        {
                            printf("YES\n"); flag=1; return 0;
                        }
                    }
                    gs=1,d=0;
                    for(int k=i-1; k>=0; k--)//向上寻找
                    {
                        if(map1[k][j]=='O')
                            break;
                        else if(map1[k][j]=='.')
                        {
                            d++;
                            if(d>1)
                            {
                                break;
                            }
                            gs++;
                        }
                        else if(map1[k][j]=='X')
                            gs++;
                        if(gs==5)
                        {
                            printf("YES\n"); flag=1; return 0;
                        }
                    }
                    gs=1,d=0;
                    for(int k=j+1,q=i+1; k<10&&q<10; k++,q++)//向右下寻找
                    {
                        if(map1[q][k]=='O')
                            break;
                        else if(map1[q][k]=='.')
                        {
                            d++;
                            if(d>1)
                                break;
                            gs++;
                        }
                        else if(map1[q][k]=='X')
                            gs++;
                        if(gs==5)
                        {
                            printf("YES\n");  flag=1;return 0;
                        }
                    }
                    gs=1,d=0;
                    for(int k=j-1,q=i-1; k>=0&&q>=0; k--,q--)//向左上寻找
                    {
                        if(map1[q][k]=='O')
                            break;
                        else if(map1[q][k]=='.')
                        {
                            d++;
                            if(d>1)
                                break;
                            gs++;
                        }
                        else if(map1[q][k]=='X')
                            gs++;
                        if(gs==5)
                        {
                            printf("YES\n"); flag=1;return 0;
                        }
                    }
                    gs=1,d=0;
                    for(int k=j-1,q=i+1; k>=0&&q<10; k--,q++)//向左下寻找
                    {
                        if(map1[q][k]=='O')
                            break;
                        else if(map1[q][k]=='.')
                        {
                            d++;
                            if(d>1)
                                break;
                            gs++;
                        }
                        else if(map1[q][k]=='X')
                            gs++;
                        if(gs==5)
                        {
                            printf("YES\n"); flag=1; return 0;
                        }
                    }
                    gs=1,d=0;
                    for(int k=j+1,q=i-1; k<=10&&q>=0; k++,q--)//向右上寻找
                    {
                        if(map1[q][k]=='O')
                        {
                            break;
                        }
                        else if(map1[q][k]=='.')
                        {
                            d++;
                            if(d>1)
                                break;
                            gs++;
                        }
                        else if(map1[q][k]=='X')
                            gs++;
                        if(gs==5)
                        {
                            printf("YES\n"); flag=1;return 0;
                        }
                    }
                }
            }
        }
        if(flag==0)//若flag==0,则说明没有找到合适的地方,所以输出no
            printf("NO\n");
    }
    return 0;
}
. 单选题(共30题,85.5分) 1. (单选题) 创建一个到百度的链接,打开页面在新打开的窗口中,可以实现的代码是( )。 A "<a href='http://www.baidu.com' target='_blank'>百度</a>" B "<a href='http://www.baidu.com' target='_self'>百度</a>" 2. (单选题) 在使用iframe这个标签时,需要设置浮动框架的边框显示,设置的属性是() A frameborder B border 3. (单选题) 通过超级链接执行JavaScript语句“alert('你好!欢迎访问我的网站!');”,源端点为文本“执行JavaScript脚本”。可以实现的代码是( ) A “<a href="alert('你好!欢迎访问我的网站!')">执行JavaScript脚本</a>” B “<a href="Javascript:alert('你好!欢迎访问我的网站!')">执行JavaScript脚本</a>” 4. (单选题) 在HTML中,下列哪个元素属于块级元素? A div B a C span D strong 5. (单选题) 能显示如下图所示的无序列表的代码是( ) A " <ul type= "disc" > <li>java </li> <li>C++ </li> <li>python </li> </ul>" B " <ul type= "circle" > <li>java </li> <li>C++ </li> <li>python </li> </ul>" 6. (单选题) 声明有序列表用( )标签。 A <ul> B <dd> C <dl> D <ol> 7. (单选题) 声明无序列表用( )标签。 A <ol> B <ul> C <div> D <em> 8. (单选题) 下列关于HTML元素的说法中,哪一项是正确的? A 块级元素无法嵌套其他元素 B 块级元素默认不会换行 C 行内元素通常用于包裹文本内容 D 行内元素可以设置宽度和高度 9. (单选题) 以下元素是行内元素的有( )。 A span B img C h1~h6 D div 10. (单选题) 以下是块级元素的是( ) A img B p C em D span 11. (单选题) 创建无序列表,需要使用的标签是( ) A ol和dd B ol、dt和dd C ol和li D ul和li 12. (单选题) 以下关于div标签描述不正确的是( ) A div能设置宽度和高度 B div是一个块级元素 C div是一个容器元素 D div不能设置内边距和外边距 13. (单选题) 能显示如下图所示的有序列表的代码是( )。 A " <ol> <li>java </li> <li>C++ </li> <li>python </li> </ol> " B " <ul> <li>java </li> <li>C++ </li> <li>python </li> </ul>" 14. (单选题) 能够实现在浏览器中打开文档的显示的代码是() A "<a href="resource/download.txt">文本显示</a>" B "<a href="resource/download.docx">文本显示</a>" 15. (单选题) 设置页面的基准url为"https://www.ayit.edu.cn" 并且链接打开都在新窗口中,可以实现的代码是( ) A "<base href="https://www.ayit.edu.cn"></base>" B "<base href="https://www.ayit.edu.cn" target="_blank">" 16. (单选题) 在设置有序列表的列表项标号为小写罗马字符是用的属性和值是( ) A "type=a" B "type=A" C "type=I" D "type=i" 17. (单选题) 创建超链接必须具备的条件是同时存在() A 目标端点和href属性 B 源端点和目标端点 18. (单选题) 创建一个超级链接,链接地址为“http://www.baidu.com”,在新窗口内打开页面,显示文本为“百度搜索”,当鼠标放在链接上时显示“你要找什么?,代码可以实现的是() A " <a href="http://www.baidu.com" target="_blank" alt="你要找什么?">百度搜索</a>" B " <a href="http://www.baidu.com" target="_blank" title="你要找什么?">百度搜索</a>" 19. (单选题) 使用超级链接实现在页面标题1处创建书签,书签名为“head”,可以实现的代码是( )。 A “<a href="head"> <h1>标题1</h1> </a>” B “<a id="head"> <h1>标题1</h1> </a>” 20. (单选题) 在使用a标签跳转到书签位置时,创建超级链接可以实现的代码是() A "<a id='#head'>跳转到头部</a>" B "<a href='#head'>跳转到头部</a>" 21. (单选题) 以下关于块级元素描述不正确的是( ) A 块级元素不能设置宽度和高度 B 块级元素不设置宽度样式时,宽度自动撑满父元素宽度 C 块级元素和相邻的块级元素依次垂直排列 D 块级元素独占一行 22. (单选题) 以下标签中,都是块级元素的是( ) A img、span、div B span、div、p C img、div 、p D div 、p、h1 23. (单选题) 在无序列表中,定义列表项用( )标签。 A <ol> B <dd> C <tr> D <li> 24. (单选题) 设置有序列表的列表标号起始编号为3,设置的属性和值是( ) A "type=3" B "start=3" 25. (单选题) 使目标端点在新打开的窗口显示,可以实现的代码是() A "<a href='a001.htm' target=_self>跳转新页面</a>" B "<a href='a001.htm' target=_blank>跳转新页面</a>" 26. (单选题) 以下关于行内块元素描述错误的是( ) A 可以设置宽度和高度 B span是行内块元素 C 和相邻的行内元素以及行内块元素从左向右一次排列在同一行,直到一行排不下时才会换行。 D 可以设置4个方向的内、外边距 27. (单选题) 以下不是块级元素的标签是( ) A div B span C p D section 28. (单选题) 能够实现图片是链接的代码是() A "<a href="http://www.baidu.com"></a><img src='img/logo.png' width=30px>" B "<a href="http://www.baidu.com"><img src='img/logo.png' width=30px></a>" 29. (单选题) 在用a标签创建书签时,能够实现的代码是() A "<a id=head>我是书签</a>" B "<a href=head>我是书签</a>" 30. (单选题) 能显示如下图所示的无序列表的代码是( ) A "<ol type= "I"> <li>java </li> <li>C++ </li> <li>python </li> </ol>" B "<ol type= "i"> <li>java </li> <li>C++ </li> <li>python </li> </ol>" 二. 多选题(共5题,14.5分) 31. (多选题) 下列关于div标签的说法,哪些是正确的? A 默认不会独占一行 B 常用于网页布局 C 是一个块级元素 D 可以嵌套其他HTML元素 32. (多选题) 块级元素的特点有( )。 A 不设置宽度样式时,宽度自动撑满父元素宽度 B 不独占一行 C 独占一行 D 和相邻的块级元素依次垂直排列 E 可以设置宽度、高度、四个方向的内外边距 33. (多选题) 能够设置宽度和高度的元素级别有( )。 A 块内行元素 B 块级元素 C 行内块元素 D 行内级元素 34. (多选题) 以下是行内块元素的是( )。 A input B img C div D span 35. (多选题) 以下是块级元素的是( )。 A h1_h6 B p C span D div E ul
最新发布
09-26
以下为一些涉及链接创建、标签属性、元素类型等方面的单选题和多选题及解答: ### 单选题 1. 创建超链接时,使用的标签是( ) A. `<img>` B. `<a>` C. `<p>` D. `<ul>` 答案:B。`<a>` 标签用于创建超链接,通过 `href` 属性指定链接的目标地址。`<img>` 用于插入图片,`<p>` 用于创建段落,`<ul>` 用于创建无序列表 [^4]。 2. 以下哪个属性用于设置图片的替代文本( ) A. `src` B. `alt` C. `width` D. `height` 答案:B。`alt` 属性用于为图片提供替代文本,当图片无法显示时,会显示该替代文本。`src` 属性用于指定图片的源文件路径,`width` 和 `height` 分别用于设置图片的宽度和高度。 3. 以下哪种元素属于块级元素( ) A. `<span>` B. `<a>` C. `<div>` D. `<img>` 答案:C。`<div>` 是典型的块级元素,会独占一行,并且可以设置宽度和高度等属性。`<span>` 是行内元素,`<a>` 通常也是行内元素,`<img>` 是替换元素,但默认是行内元素。 ### 多选题 1. 以下哪些属性可以用于 `<a>` 标签( ) A. `href` B. `target` C. `title` D. `src` 答案:ABC。`href` 属性用于指定链接的目标地址,`target` 属性用于指定链接的打开方式(如 `_blank` 表示在新窗口打开),`title` 属性用于为链接提供额外的提示信息。`src` 属性用于指定图片、脚本等资源的源文件路径,不用于 `<a>` 标签。 2. 以下哪些标签属于 HTML5 的语义化标签( ) A. `<header>` B. `<section>` C. `<article>` D. `<footer>` 答案:ABCD。HTML5 引入了一系列语义化标签,如 `<header>` 表示页面或区域的头部,`<section>` 表示文档中的一个章节,`<article>` 表示独立的内容,`<footer>` 表示页面或区域的底部 [^2]。 ```html <!-- 示例代码:使用 a 标签创建链接 --> <a href="https://www.example.com" target="_blank" title="点击访问示例网站">示例网站</a> <!-- 示例代码:使用 HTML5 语义化标签 --> <header> <h1>页面标题</h1> </header> <section> <h2>章节标题</h2> <p>章节内容</p> </section> <article> <h2>文章标题</h2> <p>文章内容</p> </article> <footer> <p>版权信息</p> </footer> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值