专栏文章

题解:CF69D Dot

CF69D题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mingzj8i
此快照首次捕获于
2025/12/02 02:15
3 个月前
此快照最后确认于
2025/12/02 02:15
3 个月前
查看原文
简单搜索题。
我们可以发现,翻转操作无意义。因为如果你翻转后必输,对手会毫不犹豫的再翻转回去。否则对手会不翻转,去拼那一线生机。
然后再根据“如果操作后对方怎么选都不能胜则必胜,否则必败”搜索即可。
代码:
CPP
#include<bits/stdc++.h>
#define f(x,y) F[x+250][y+250]
#define int long long
using namespace std;
const int N=21,M=1000;
int x,y,n,d,dx[N],dy[N],F[M][M];
bool DFS(int x,int y)
{
	if(x*x+y*y>d*d) return true;
	if(f(x,y)!=-1) return f(x,y);
	f(x,y)=0;
	for(int i=1;i<=n;i++)
	{
		if(!DFS(x+dx[i],y+dy[i]))
		{
			f(x,y)=true;
			break;
		}
	}
	return f(x,y);
}
signed main()
{
	scanf("%lld%lld%lld%lld",&x,&y,&n,&d);
	memset(F,-1,sizeof(F));
	for(int i=1;i<=n;i++)
		scanf("%lld%lld",&dx[i],&dy[i]);
	printf("%s\n",DFS(x,y)?"Anton":"Dasha");
	return 0;
}
然后就过了

评论

0 条评论,欢迎与作者交流。

正在加载评论...