其实本题还有一个可以沿y=x对称的操作,但仔细思考会发现其并不影响
对于一个点,比如A当前先走,只要找到一个他可以跳的地方且B从这儿必跪的A就必胜=否则A跪
所以可以用记忆化dfs来写,复杂度大概200*200*20
1 #include<stdio.h> 2 #include<string.h> 3 #include<algorithm> 4 using namespace std; 5 int x0,y0,dp[405][405],n,d; 6 int x[405],y[405]; 7 int check(int tx,int ty) 8 { 9 if ((tx-200)*(tx-200)+(ty-200)*(ty-200)<=d*d) return 1; 10 return 0; 11 } 12 int dfs(int tx,int ty) 13 { 14 if (dp[tx][ty]!=-1) return dp[tx][ty]; 15 for (int i=1;i<=n;i++) 16 if (check(tx+x[i],ty+y[i])&&dfs(tx+x[i],ty+y[i])==0) 17 return dp[tx][ty]=1; 18 return dp[tx][ty]=0; 19 } 20 int main() 21 { 22 scanf("%d%d%d%d",&x0,&y0,&n,&d); 23 for (int i=1;i<=n;i++) 24 scanf("%d%d",&x[i],&y[i]); 25 memset(dp,-1,sizeof(dp)); 26 if (dfs(x0+200,y0+200)) printf("Anton\n"); 27 else printf("Dasha\n"); 28 }