Problem Statement

This is an interactive task (where your program interacts with the judge's program via Standard Input and Output).

You are given integers $N$, $L$, and $R$.

You play the following game against the judge:

There are $N$ cards numbered $1$ through $N$ on the table.

The players alternately perform the following operation:

  • choose an integer pair $(x, y)$ satisfying $1 \leq x \leq N$, $L \leq y \leq R$ such that all of the $y$ cards $x, x+1, \dots, x+y-1$ remain on the table, and remove cards $x, x+1, \dots, x+y-1$ from the table.

The first player to become unable to perform the operation loses, and the other player wins.

Choose whether to go first or second, and play the game against the judge to win.

Constraints

  • $1 \leq N \leq 2000$
  • $1 \leq L \leq R \leq N$
  • $N$, $L$, and $R$ are integers.

Input and Output

This is an interactive task (where your program interacts with the judge's program via Standard Input and Output).

Initially, receive $N$, $L$, and $R$, given from the input in the following format:

$N$ $L$ $R$

First, you choose whether to go first or second. Print First if you choose to go first, and Second if you choose to go second.

Then, the game immediately starts. If you choose to go first, the judge goes second, and vice versa. You are to interact with the judge via input and output until the game ends to win the game.

In your turn, print an integer pair $(x, y)$ that you choose in the operation in the following format. If there is no $(x, y)$ that you can choose, print $(x, y) = (0, 0)$ instead.

$x$ $y$

In the judge's turn, the judge print an integer pair $(a, b)$ in the following format:

$a$ $b$

Here, it is guaranteed that $(a, b)$ is of one of the following three kinds.

  • If $(a, b) = (0, 0)$: the judge is unable to perform the operation. In other words, you have won the game.
  • If $(a, b) = (-1, -1)$: you have chosen an illegal $(x, y)$ or printed $(0, 0)$. In other words, you have lost the game.
  • Otherwise: the judge has performed the operation with $(x,y) = (a,b)$. It is guaranteed that judge chooses valid $(x, y)$.

If the judge returns $(a,b)=(0,0)$ or $(a,b)=(-1,-1)$, the game has already ended. In that case, terminate the program immediately.

Notes

  • After each output, add a newline and then flush Standard Output. Otherwise, you may get a TLE verdict.
  • If an invalid output is printed during the interaction, or if the program terminates halfway, the verdict will be indeterminate. Especially, note that if a runtime error occurs during the execution of the program, you may get a WA or TLE verdict instead of a RE verdict.
  • Terminate the program immediately after the game ends. Otherwise, the verdict will be indeterminate.

Sample Interaction

The following is a sample interaction where $N = 6, L = 1$, and $R = 2$.

Input Output Description
6 1 2 Initially, you are given integers $N$, $L$, and $R$.
First You choose to go first and start the game.
2 1 $(x, y) = (2, 1)$ is chosen to remove card $2$.
3 2 $(x, y) = (3, 2)$ is chosen to remove cards $3, 4$.
6 1 $(x, y) = (6, 1)$ is chosen to remove card $6$.
5 1 $(x, y) = (5, 1)$ is chosen to remove card $5$.
1 1 $(x, y) = (1, 1)$ is chosen to remove card $1$.
0 0 The judge is unable to perform the operation, so you win.

首先先玩着试一下。假设 \(N=11,L=R=3\) 吧。\(0\) 表示未取,\(1\) 表示已取。

0 0 0 0 0 0 0 0 0 0 0

突然发现,如果我们第一步去了中间的部分,那么情况就会变成

0 0 0 0 1 1 1 0 0 0 0

然后此时左右情况对称,对手怎么取,我在另一个方向同样方式取。这样的话对手怎么做,我都有方法做出反映。此时先手必胜。

但是这种方法不能用在所有情况。比如 \(N=11,L=R=2\) 时就不能构造出两个对称的位置。但是这样可以解决所有 \(L\ne R\) 的情况。

我们现在只用研究 \(L=R\) 的情况了。这个时候可以用 SG 函数解决。

根据 SG 函数的定义,设 \(f_i\) 为有 \(i\) 个数时的 SG 函数,那么 \(f_i=\operatorname{mex}\limits_{j\le i-l}\{f_j\oplus f_{i-l-j}\}\)。如果 \(f_n\) 等于0,后手必胜。否则先手必胜。

若 \(f_n\ne 0\),可以先枚举每种方案,找到一种合法方案使得取完后 SG 函数为 0。而后面对手做出操作时,也一样找到一种方案使得 SG 函数为 \(0\)。这样一直维护,对手怎么操作我都有后续操作。所以肯定必胜。

SG 函数可以每次重算,不用想烦人的维护。反正瓶颈不在这。

#include<bits/stdc++.h>
const int N=2005;
int n,l,r,md,k,x,y,f[N],t[N],s[N],nxt[N],lst[N];
int main()
{
scanf("%d%d%d",&n,&l,&r);
if(l!=r)
{
if(n-l&1)
k=l+1;
else
k=l;
md=n+k>>1;
puts("First");
printf("%d %d\n",md-k+1,k);
fflush(stdout);
while(1)
{
scanf("%d%d",&x,&y);
if(!x)
break;
if(x<md)
printf("%d %d\n",x+md,y);
else
printf("%d %d\n",x-md,y);
fflush(stdout);
}
}
else
{
for(int i=l;i<=n;i++)
{
memset(s,0,sizeof(s));
for(int j=0;j<=i-l;j++)
s[f[j]^f[i-l-j]]=1;
for(int j=0;j>=0;j++)
if(!s[j])
f[i]=j,j=-5;
}
if(f[n])
{
puts("First");
for(int i=0;i<=n;i++)
{
if(!(f[i]^f[n-l-i]))
{
printf("%d %d\n",i+1,l);
for(int j=i+1;j<=i+l;j++)
t[j]=1;
i=n+1;
}
}
}
else
puts("Second");
t[n+1]=t[0]=1;
fflush(stdout);
while(1)
{
scanf("%d%d",&x,&y);
if(!x&&!y)
break;
k=0;
for(int i=x;i<=x+y-1;i++)
t[i]=1;
for(int i=n;i>=0;i--)
{
nxt[i]=nxt[i+1];
if(t[i+1])
nxt[i]=i+1;
if(t[i])
k^=f[nxt[i]-i-1];
}
for(int i=1;i<=n;i++)
{
s[i]=s[i-1]+t[i],lst[i]=lst[i-1];
if(t[i-1])
lst[i]=i-1;
}
for(int i=1;i+l-1<=n;i++)
{
if(s[i-1]==s[i+l-1])
{
if(!(k^f[nxt[i]-lst[i]-1]^f[nxt[i+l-1]-i-l]^f[i-lst[i]-1]))
{
// printf("%d %d\n",k^f[nxt[i]-lst[i]-1],f[nxt[i+l-1]-i-l]^f[i-lst[i]-1]);
printf("%d %d\n",i,l);
for(int j=i;j<i+l;j++)
t[j]=1;
break;
}
}
}
fflush(stdout);
}
}
}

[ABC278G] Generalized Subtraction Game的更多相关文章

  1. Analysis of Two-Channel Generalized Sidelobe Canceller (GSC) With Post-Filtering

    作者:凌逆战 地址:https://www.cnblogs.com/LXP-Never/p/12071748.html 题目:带后置滤波的双通道广义旁瓣相消器(GSC)的分析 作者:Israel Co ...

  2. [LeetCode] Generalized Abbreviation 通用简写

    Write a function to generate the generalized abbreviations of a word. Example: Given word = "wo ...

  3. 广义线性模型(Generalized Linear Models)

    前面的文章已经介绍了一个回归和一个分类的例子.在逻辑回归模型中我们假设: 在分类问题中我们假设: 他们都是广义线性模型中的一个例子,在理解广义线性模型之前需要先理解指数分布族. 指数分布族(The E ...

  4. LeetCode Generalized Abbreviation

    原题链接在这里:https://leetcode.com/problems/generalized-abbreviation/ 题目: Write a function to generate the ...

  5. PAT 解题报告 1050. String Subtraction (20)

    1050. String Subtraction (20) Given two strings S1 and S2, S = S1 - S2 is defined to be the remainin ...

  6. [Locked] Generalized Abbreviation

    Write a function to generate the generalized abbreviations of a word. Example:Given word = "wor ...

  7. [ACM] ZOJ 3816 Generalized Palindromic Number (DFS,暴力枚举)

    Generalized Palindromic Number Time Limit: 2 Seconds      Memory Limit: 65536 KB A number that will ...

  8. Regression:Generalized Linear Models

    作者:桂. 时间:2017-05-22  15:28:43 链接:http://www.cnblogs.com/xingshansi/p/6890048.html 前言 本文主要是线性回归模型,包括: ...

  9. [leetcode-592-Fraction Addition and Subtraction]

    Given a string representing an expression of fraction addition and subtraction, you need to return t ...

  10. [LeetCode] Fraction Addition and Subtraction 分数加减法

    Given a string representing an expression of fraction addition and subtraction, you need to return t ...

随机推荐

  1. 如何利用AI智能聊天机器人10秒钟做出一个故事绘本的神奇插件

    原文链接:如何利用AI智能聊天机器人10秒钟做出一个故事绘本的神奇插件 ChatGPT以下称为AI智能聊天机器人 一.AI智能聊天机器人4中集成"Stories"插件 对于已经熟悉 ...

  2. Andrew Ng 机器学习&深度学习课程 代码作业解答 集合

    写在最前 ​ 2018年是对自己来说是崭新的一年,在过去的3个多月里,从最基础的lr, 学到现在的LSTM, GAN..感觉第一次追上了计算机科学飞速发展的浪潮.虽然很多地方都仍是一知半解,但时间还长 ...

  3. 修复linux系统更新后Conky无法启动的问题

    kali系统更新后的版本为 ~$uname -a Linux 4rk 5.9.0-kali5-amd64 #1 SMP Debian 5.9.15-1kali1 (2020-12-18) x86_64 ...

  4. Java 21 新特性:switch的模式匹配

    在之前的Java 17新特性中,我们介绍过关于JEP 406: switch的模式匹配,但当时还只是关于此内容的首个预览版本.之后在JDK 18.JDK 19.JDK 20中又都进行了更新和完善.如今 ...

  5. Solution -「CF 1477A」Nezzar and Board

    Description Link. $ n $ distinct integers $ x_1,x_2,\ldots,x_n $ are written on the board. Nezzar ca ...

  6. Go语言系列——21-Go协程、22-信道(channel)、23-缓冲信道和工作池、24-Select、25-Mutex、26-结构体取代类、27-组合取代继承、多态、 29-Defer、错误处理

    文章目录 21-Go协程 Go 协程是什么? Go 协程相比于线程的优势 如何启动一个 Go 协程? 启动多个 Go 协程 22-信道(channel) 什么是信道? 信道的声明 通过信道进行发送和接 ...

  7. Django框架项目之git笔记——版本控制器、git介绍、git使用

    文章目录 版本控制器 git 简介 git与svn比较 git的工作流程 版本库间的通信 git分支管理 git使用 流程(核心总结) 安装 基础命令 将已有的文件夹 - 初始化为git仓库 在指定目 ...

  8. 通过资源名称得到资源id

    demo地址 主要应用类 package com.example.activitylibrary; import android.app.Activity; import android.os.Bun ...

  9. umich cv-2-2

    UMICH CV Linear Classifiers 在上一篇博文中,我们讨论了利用损失函数来判断一个权重矩阵的好坏,在这节中我们将讨论如何去找到最优的权重矩阵 想象我们要下到一个峡谷的底部,我们自 ...

  10. 【短道速滑十一】标准的Gabor滤波器及Log_Gabor滤波器的实现、解析、速度优化及其和Halcon中gen_gabor的比较。

    最近有朋友在研究Halcon中gen_gabor的函数,和我探讨,因为我之前也没有怎么去关注这个函数,因此,前前后后大概也折腾了有一个星期去模拟实现这个东西,虽然最终没有实现这个函数,但是也是有所收获 ...