社区讨论
Fwb Round 2 T2 75 pts 求调,悬关
题目总版参与者 2已保存回复 15
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 15 条
- 当前快照
- 1 份
- 快照标识符
- @mhjdny1m
- 此快照首次捕获于
- 2025/11/04 00:51 4 个月前
- 此快照最后确认于
- 2025/11/04 06:15 4 个月前
呜呜呜,没调出来。
CPP#include <bits/stdc++.h>
#define PII pair <int, int>
#define LL long long
#define ST string
#define DB double
#define fr(x, y, z) for(int x = y; x <= z; x ++ )
#define dfr(x, y, z) for(int x = y; x >= z; x -- )
using namespace std;
const int N = 60;
int n, farm = -1, nrk;
char s[5][N], x, y, z;
int P[5][N], sze[5];
char pk[30] = {' ', '3', '4', '5', '6', '7', '8', '9', 'S', 'J', 'Q', 'K', 'A', '2', 'X', 'D'};
int sz[10] = {0, 1, 2, 3, 4};
unordered_map <char, int> rk;
bool cp(int x, int &lei, int &lstp)
{
fr(i, lstp + 1, nrk)
{
if(P[x][i] == sz[lei])
{
if(lei == 3)
{
int hvd = 0;
fr(j, 1, nrk)
{
if(j != i && P[x][j])
{
hvd = j;
break;
}
}
if(hvd == 0) continue;
P[x][hvd] -- ;
P[x][i] -= 3;
sze[x] -= 4;
lstp = i;
cout << x << ' ' << pk[i] << ' ' << sz[lei] << '\n';
cout << x << ' ' << pk[hvd] << ' ' << 1 << '\n';
// cout << "LSTP " << lstp << '\n';
return true;
}
else
{
if(lei == 1 && ((pk[i] == 'X' && P[x][rk['D']]) || (pk[i] == 'D' && P[x][rk['X']])))
continue;
lstp = i;
cout << x << ' ' << pk[i] << ' ' << sz[lei] << '\n';
// cout << "LSTP " << lstp << '\n';
P[x][i] -= sz[lei];
sze[x] -= sz[lei];
return true;
}
}
}
if(lei != 4)
{
fr(i, 1, nrk) if(P[x][i] == 4)
{
cout << x << ' ' << pk[i] << ' ' << 4 << '\n';
lei = 4;
lstp = i;
P[x][i] -= 4;
sze[x] -= 4;
return true;
}
}
if(P[x][rk['X']] && P[x][rk['D']])
{
cout << x << " X 1\n" << x << " D 1\n";
sze[x] -= 2;
lstp = 114514;
P[x][rk['X']] -- ;
P[x][rk['D']] -- ;
lei = 4; return true;
}
cout << x << " Next\n";
return false;
}
int nxt(int x)
{ return x == 2 ? 3 : (x + 1) % 3; }
void dofarm(int x, int lst, int lei, int lstp)
{
// cout << "DF " << x << ' ' << lst << ' ' << lei << ' ' << lstp << ' ' << sze[x] << '\n';
// cout << "\n" << x << ':';
// fr(i, 1, nrk) cout << P[x][i] << '(' << pk[i] << ") ";
// cout << "\n\n";
if(lst == x)
{
if(!sze[x])
{
cout << (x == farm ? "D\n" : "P\n");
return ;
}
fr(i, 1, nrk)
{
int lei = 0;
fr(j, 1, 3) if(P[x][i] == sz[j])
lei = j;
if(lei == 3)
{
int hvd = 0;
fr(j, 1, nrk) if(j != i && P[x][j])
{ hvd = j; break; }
// cout << "HVD " << hvd << '\n';
if(hvd)
{
sze[x] -= 4;
P[x][hvd] -- , P[x][i] -= 3;
cout << x << ' ' << pk[i] << " 3\n";
cout << x << ' ' << pk[hvd] << " 1\n";
if(!sze[x])
{
cout << (x == farm ? "D\n" : "P\n");
return ;
}
dofarm(nxt(x), x, lei, i);
return ;
}
}
else if(lei != 0)
{
if(lei == 1 && ((pk[i] == 'X' && P[x][rk['D']]) || (pk[i] == 'D' && P[x][rk['X']])))
continue;
sze[x] -= sz[lei];
P[x][i] -= sz[lei];
cout << x << ' ' << pk[i] << ' ' << sz[lei] << '\n';
if(!sze[x])
{
cout << (x == farm ? "D\n" : "P\n");
return ;
}
dofarm(nxt(x), x, lei, i);
return ;
}
}
if(sze[x] != 3)
{
fr(i, 1, nrk) if(P[x][i] == 4)
{
P[x][i] -= 4;
sze[x] -= 4;
cout << x << ' ' << pk[i] << " 4\n";
if(!sze[x])
{
cout << (x == farm ? "D\n" : "P\n");
return ;
}
dofarm(nxt(x), x, 4, i);
return ;
}
if(!sze[x])
{
cout << (x == farm ? "D\n" : "P\n");
return ;
}
P[x][rk['X']] -- , P[x][rk['D']] -- ;
sze[x] -= 2;
cout << x << " X 1\n" << x << " D 1\n";
if(!sze[x])
{
cout << (x == farm ? "D\n" : "P\n");
return ;
}
dofarm(nxt(x), x, 4, 114514);
return ;
}
if(sze[x] == 3) fr(i, 1, nrk)
{
if(!P[x][i]) continue;
cout << x << ' ' << pk[i] << " 1\n";
sze[x] -- , P[i][x] -- ;
if(!sze[x])
{
cout << (x == farm ? "D\n" : "P\n");
return ;
}
dofarm(nxt(x), x, 1, i);
return ;
}
}
if(x != farm && lst != farm)
{
cout << x << " Next\n";
dofarm(nxt(x), lst, lei, lstp);
}
else
{
if(cp(x, lei, lstp)) lst = x;
// cout << "ACP " << x << ' ' << sze[x] << '\n';
if(!sze[x])
{
cout << (x == farm ? "D\n" : "P\n");
return ;
}
dofarm(nxt(x), lst, lei, lstp);
}
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
fr(j, 1, 3) fr(i, 1, 17)
cin >> s[j][i];
cin >> x >> y >> z;
for(char i = '3'; i <= '9'; i ++ ) rk[i] = ++ nrk;
rk['S'] = ++ nrk;
rk['J'] = ++ nrk, rk['Q'] = ++ nrk;
rk['K'] = ++ nrk, rk['A'] = ++ nrk;
rk['2'] = ++ nrk;
rk['X'] = ++ nrk;
rk['D'] = ++ nrk;
fr(i, 1, 3) sort(s[i] + 1, s[i] + 1 + 17, [](char x, char y) { return rk[x] < rk[y]; });
fr(i, 1, 3)
{
fr(j, 1, 17)
{
if(s[i][j] == 'D') farm = i;
P[i][rk[s[i][j]]] ++ , sze[i] ++ ;
}
if(farm == i) P[i][rk[x]] ++ , P[i][rk[y]] ++ , P[i][rk[z]] ++ , sze[i] += 3;
}
// cout << rk['D'] << '\n';
// cout << pk[rk['D']] << '\n';
dofarm(farm, farm, 0, 0);
return 0;
}
CPP#include <bits/stdc++.h>
#define PII pair <int, int>
#define LL long long
#define ST string
#define DB double
#define fr(x, y, z) for(int x = y; x <= z; x ++ )
#define dfr(x, y, z) for(int x = y; x >= z; x -- )
using namespace std;
const int N = 60;
int n, farm = -1, nrk;
char s[5][N], x, y, z;
int P[5][N], sze[5];
char pk[30] = {' ', '3', '4', '5', '6', '7', '8', '9', 'S', 'J', 'Q', 'K', 'A', '2', 'X', 'D'};
int sz[10] = {0, 1, 2, 3, 4};
unordered_map <char, int> rk;
bool cp(int x, int &lei, int &lstp)
{
fr(i, lstp + 1, nrk)
{
if(P[x][i] == sz[lei])
{
if(lei == 3)
{
int hvd = 0;
fr(j, 1, nrk)
{
if(j != i && P[x][j])
{
hvd = j;
break;
}
}
if(hvd == 0) continue;
P[x][hvd] -- ;
P[x][i] -= 3;
sze[x] -= 4;
lstp = i;
cout << x << ' ' << pk[i] << ' ' << sz[lei] << '\n';
cout << x << ' ' << pk[hvd] << ' ' << 1 << '\n';
// cout << "LSTP " << lstp << '\n';
return true;
}
else
{
lstp = i;
cout << x << ' ' << pk[i] << ' ' << sz[lei] << '\n';
// cout << "LSTP " << lstp << '\n';
P[x][i] -= sz[lei];
sze[x] -= sz[lei];
return true;
}
}
}
if(lei != 4)
{
fr(i, 1, nrk) if(P[x][i] == 4)
{
cout << x << ' ' << pk[i] << ' ' << 4 << '\n';
lei = 4;
lstp = i;
P[x][i] -= 4;
sze[x] -= 4;
return true;
}
}
if(P[x][rk['X']] && P[x][rk['D']])
{
cout << x << " X 1\n" << x << " D 1\n";
sze[x] -= 2;
lstp = 114514;
P[x][rk['X']] -- ;
P[x][rk['D']] -- ;
lei = 4; return true;
}
cout << x << " Next\n";
return false;
}
int nxt(int x)
{ return x == 2 ? 3 : (x + 1) % 3; }
void dofarm(int x, int lst, int lei, int lstp)
{
// cout << "DF " << x << ' ' << lst << ' ' << lei << ' ' << lstp << ' ' << sze[x] << '\n';
// cout << "\n" << x << ':';
// fr(i, 1, nrk) cout << P[x][i] << '(' << pk[i] << ") ";
// cout << "\n\n";
if(lst == x)
{
if(!sze[x])
{
cout << (x == farm ? "D\n" : "P\n");
return ;
}
fr(i, 1, nrk)
{
int lei = 0;
fr(j, 1, 3) if(P[x][i] == sz[j])
lei = j;
if(lei == 3)
{
int hvd = 0;
fr(j, 1, nrk) if(j != i && P[x][j])
{ hvd = j; break; }
// cout << "HVD " << hvd << '\n';
if(hvd)
{
sze[x] -= 4;
P[x][hvd] -- , P[x][i] -= 3;
cout << x << ' ' << pk[i] << " 3\n";
cout << x << ' ' << pk[hvd] << " 1\n";
if(!sze[x])
{
cout << (x == farm ? "D\n" : "P\n");
return ;
}
dofarm(nxt(x), x, lei, i);
return ;
}
}
else if(lei != 0)
{
if(lei == 1 && ((pk[i] == 'X' && P[x][i + 1]) || (pk[i] == 'D' && P[x][i - 1])))
continue;
sze[x] -= sz[lei];
P[x][i] -= sz[lei];
cout << x << ' ' << pk[i] << ' ' << sz[lei] << '\n';
if(!sze[x])
{
cout << (x == farm ? "D\n" : "P\n");
return ;
}
dofarm(nxt(x), x, lei, i);
return ;
}
}
if(sze[x] != 3)
{
fr(i, 1, nrk) if(P[x][i] == 4)
{
P[x][i] -= 4;
sze[x] -= 4;
cout << x << ' ' << pk[i] << " 4\n";
if(!sze[x])
{
cout << (x == farm ? "D\n" : "P\n");
return ;
}
dofarm(nxt(x), x, 4, i);
return ;
}
P[x][rk['X']] -- , P[x][rk['D']] -- ;
sze[x] -= 2;
cout << x << " X 1\n" << x << " D 1\n";
if(!sze[x])
{
cout << (x == farm ? "D\n" : "P\n");
return ;
}
dofarm(nxt(x), x, 4, 114514);
return ;
}
if(sze[x] == 3) fr(i, 1, nrk)
{
if(!P[x][i]) continue;
cout << x << ' ' << pk[i] << " 1\n";
sze[x] -- , P[i][x] -- ;
if(!sze[x])
{
cout << (x == farm ? "D\n" : "P\n");
return ;
}
dofarm(nxt(x), x, 1, i);
return ;
}
}
if(x != farm && lst != farm)
{
cout << x << " Next\n";
dofarm(nxt(x), lst, lei, lstp);
}
else
{
if(cp(x, lei, lstp)) lst = x;
// cout << "ACP " << x << ' ' << sze[x] << '\n';
if(!sze[x])
{
cout << (x == farm ? "D\n" : "P\n");
return ;
}
dofarm(nxt(x), lst, lei, lstp);
}
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
fr(j, 1, 3) fr(i, 1, 17)
cin >> s[j][i];
cin >> x >> y >> z;
for(char i = '3'; i <= '9'; i ++ ) rk[i] = ++ nrk;
rk['S'] = ++ nrk;
rk['J'] = ++ nrk, rk['Q'] = ++ nrk;
rk['K'] = ++ nrk, rk['A'] = ++ nrk;
rk['2'] = ++ nrk;
rk['X'] = ++ nrk;
rk['D'] = ++ nrk;
fr(i, 1, 3) sort(s[i] + 1, s[i] + 1 + 17, [](char x, char y) { return rk[x] < rk[y]; });
fr(i, 1, 3)
{
fr(j, 1, 17)
{
if(s[i][j] == 'D') farm = i;
P[i][rk[s[i][j]]] ++ , sze[i] ++ ;
}
if(farm == i) P[i][rk[x]] ++ , P[i][rk[y]] ++ , P[i][rk[z]] ++ , sze[i] += 3;
}
// cout << rk['D'] << '\n';
// cout << pk[rk['D']] << '\n';
dofarm(farm, farm, 0, 0);
return 0;
}
回复
共 15 条回复,欢迎继续交流。
正在加载回复...