为啥没人发题解那就我发吧
2026-06-21 15:24:45
发布于:广东
3阅读
0回复
0点赞
#include <bits/stdc++.h>
using namespace std;
bool f[18][305][305];
string S;
int s,t,flag;
void work1(int turn,int j,int k){
int num1=0,X1=0,Y1=0;
int num3=0,X3=0,Y3=0;
int num4=0,X4=0,Y4=0;
int tot=j*k;
for (int x=s;x*x<=tot;x++)
if (tot%x==0 && tot/x<=300){
int y=tot/x;
if (turn==1 || f[turn-1][x][y]==0) {num1++; X1=x; Y1=y;}
if (turn>=3 && f[turn-2][x][y]==0) {num3++; X3=x; Y3=y;}
if (f[turn-1][x][y]==1)
if (turn<=3 || f[turn-3][x][y]==0){num4++; X4=x; Y4=y;}
}
if (num1==1 && X1==j && Y1==k) f[turn][j][k]=1;
if (num3==1 && X3==j && Y3==k) f[turn][j][k]=1;
if (num4==1 && X4==j && Y4==k) f[turn][j][k]=1;
return;
}
void work2(int turn,int j,int k){
int num1=0,X1=0,Y1=0;
int num3=0,X3=0,Y3=0;
int num4=0,X4=0,Y4=0;
for (int x=s;x<=j+k-x;x++){
int y=j+k-x;
if (turn==1 || f[turn-1][x][y]==0) {num1++; X1=x; Y1=y;}
if (turn>=3 && f[turn-2][x][y]==0) {num3++; X3=x; Y3=y;}
if (f[turn-1][x][y]==1) //确定
if (turn<=3 || f[turn-3][x][y]==0) {num4++; X4=x; Y4=y;}
}
if (num1==1 && X1==j && Y1==k) f[turn][j][k]=1;
if (num3==1 && X3==j && Y3==k) f[turn][j][k]=1;
if (num4==1 && X4==j && Y4==k) f[turn][j][k]=1;
return;
}
int main(){
cin>>s>>S>>t;
if (S=="Alice") flag=0; else flag=1;
for (int turn=1;turn<=t+2;turn++){
for (int j=s;j<=300;j++)
for (int k=j;k<=300;k++){
if (turn>=3) f[turn][j][k]|=f[turn-2][j][k];
if (f[turn][j][k]) continue;
if (flag==0) work1(turn,j,k);
else work2(turn,j,k);
}
flag=1-flag;
}
int sum=s+s;
while (true){
if (sum>=1000) break;
for (int i=s;i<=sum-i;i++){
int j=sum-i;
if (f[t+1][i][j]==0 || f[t+2][i][j]==0) continue;
int flag=0;
for (int k=1;k<=t;k++) if (f[k][i][j]==1) flag=1;
if (flag) continue;
cout<<i<<" "<<j<<endl;
return 0;
}
sum++;
}
}
这里空空如也






有帮助,赞一个