五子棋AI

TimeLimit:20000MS  MemoryLimit:128MB
64-bit integer IO format:%lld
未提交 | 登录后收藏 | 已有6人收藏了本题
Problem Description

这题要你写一个五子棋的AI哦。

无禁手


提交的AI(挑战者)会和服务器上的另外一个AI(擂主)对战。

共进行20场对战、其中10场擂主执黑棋先手,10场擂主执白棋后手。


得分规则:

执黑棋先手时获胜一局得4分,平局得2分,失败得0分。

执白棋后手时获胜一局得6分,平局得3分,失败得0分。

总分为10*4+10*6=100分。


可以在评测界面点击评测结果进入详细对战情况。


总运行时间不超过20秒,一步思考时间不能超过1秒。

Input

输入的第一个整数是一个0~10^9的随机数(建议用做随机种子,而不要用时间当随机种子,因为运行多次的时间间隔很小,获取的时间经常相同)

输入的第二行是两个整数col,row(输入都为15)

接下来是一个整数1或者2。输入1表示你为黑子先手,输入2表示你是白子后手。

如果你是先手,要先输出两个整数表示落子坐标。

然后循环

读取两个整数表示对方落子,然后再输出两个整数表示自己下子。

可以不用判断胜负,一直落子就可以了,服务器会自行判断一局游戏结束



所有输出的整数都是一个整数占一行(很重要)。

一批输出结束后必须调用fflush(stdout);

坐标系从0开始。左上角是0,0

Output
SampleInput
样例程序:(随机落子)
#include<stdio.h>
#include<map>
#include<set>
#include<stdlib.h>
#include<time.h>
using namespace std;
int col,row,z;
set<pair<int,int> > m;
pair<int,int> getSt(){
    int k;
    pair<int,int> p;
    do{
        p = pair<int,int>(rand()%row,rand()%col);
        k = m.count(p);
    }while(k == 1);
    return p;
}
int main()
{
    int seed;
    scanf("%d",&seed);
    srand(seed);
    scanf("%d%d",&col,&row);
    scanf("%d",&z);
    if(z == 1){
        pair<int,int> p = getSt();
        m.insert(p);
        printf("%d\n",p.first);
        printf("%d\n",p.second);
        fflush(stdout);
    }
    while(1){
        int x,y;
        scanf("%d%d",&x,&y);
        m.insert(pair<int,int>(x,y));

        pair<int,int> p = getSt();
        m.insert(p);
        printf("%d\n",p.first);
        printf("%d\n",p.second);
        fflush(stdout);
    }
    return 0;
}
SampleOutput
Submit
题目统计信息详细
总AC数65
通过人数16
尝试人数52
总提交量975
AC率1.64%
AC该题后可以添加标签
贴完标签可以获得20ACB。
并且可以获得本题所有提交代码查看权限。
点击标题可以显示标签。
如果你还没认真思考过这题,请不要查看标签
如果您已经通过了该题,请务为该题贴上标签
作者

T^T Online Judge

[BUG反馈] [FAQ] [闽ICP备17026590号-1]
当前版本:3.24 系统时间: