这题要你写一个五子棋的AI哦。
无禁手
提交的AI(挑战者)会和服务器上的另外一个AI(擂主)对战。
共进行20场对战、其中10场擂主执黑棋先手,10场擂主执白棋后手。
得分规则:
执黑棋先手时获胜一局得4分,平局得2分,失败得0分。
执白棋后手时获胜一局得6分,平局得3分,失败得0分。
总分为10*4+10*6=100分。
可以在评测界面点击评测结果进入详细对战情况。
总运行时间不超过20秒,一步思考时间不能超过1秒。
输入的第一个整数是一个0~10^9的随机数(建议用做随机种子,而不要用时间当随机种子,因为运行多次的时间间隔很小,获取的时间经常相同)
输入的第二行是两个整数col,row(输入都为15)
接下来是一个整数1或者2。输入1表示你为黑子先手,输入2表示你是白子后手。
如果你是先手,要先输出两个整数表示落子坐标。
然后循环
读取两个整数表示对方落子,然后再输出两个整数表示自己下子。
可以不用判断胜负,一直落子就可以了,服务器会自行判断一局游戏结束
所有输出的整数都是一个整数占一行(很重要)。
一批输出结束后必须调用fflush(stdout);
坐标系从0开始。左上角是0,0
样例程序:(随机落子) #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; }