今晚看见ec上gym了,也是时候写写游记了
开场有人开了A和I,队友读完I后觉得可做,我看榜后去弄A。
然后队友I写出了些问题,我上机写A,此时评测机繁忙,后面显示correct过了,罪恶-1
然后队友讨论完I后也过了,接下来我看完L也上机写,但是写着写着写挂了(此时理解错题意,1不代表是正数而应该是非零数),想着开个标记数组来判下正负抵消变成零的情况,但队友说模拟就行,随下机去看B。
B又看错题意,上机用kmp写了会才发现应该是所有子串的和,随下机。。。。。。。。偷听到对面说哈希二字,于是开始思考哈希怎么做,但是发现后面那段只能想到$n^3$的做法,于是猝。(现在想到跑kmp,写完游记逝世)
此时队友卡在L,我又跑回去看L。然后又想起当时听到对面说过染色,于是想起树状数组是个树状结构,于是开始重写L,写完发现一些case没处理,然后改了一下,过了,省赛罪恶再-1
然后接下来就是队友在讨论该死的E了,我跑去干B,干到一半不行,去看J。然后人已经懵了,竟然问起了J是不是树这种弱智问题。。。
E题赛后知道Alice只有三张牌那种恶心情况但还是写挂7次(虽然有几个是读入数据写挂了),是否应该不动E,干其他题目呢?
然后这种yes or no的问题,分类讨论太多下次建议一定要写成函数返回!!!!!(此处省略一千字……
现在看来,还是对算法掌握不够,不然也不会打了一年铁了!!! 🙁
E题代码:
#include <bits/stdc++.h>
using namespace std;
int tt, n, m, p;
map<char, int> cov;
bool solve()
{
cin >> n >> m;
string s;
vector<int> v1, v2;
for (int i = 1; i <= n; ++i)
{
cin >> s;
v1.push_back(cov[s[0]]);
}
for (int i = 1; i <= m; ++i)
{
cin >> s;
v2.push_back(cov[s[0]]);
}
sort(v1.begin(), v1.end());
sort(v2.begin(), v2.end());
cin >> s;
p = cov[s[0]];
if(n==1)
return false;
if (v1[0] >= p || v2[0] >= p)
return false;
auto cna = lower_bound(v1.begin(), v1.end(), p) - v1.begin();
auto cnb = lower_bound(v2.begin(), v2.end(), p) - v2.begin();
auto cnab = lower_bound(v1.begin(), v1.end(), v2[0]);
int ck1 = (cnab != v1.end() && *cnab < p);
if (cnb > 1)
return true;
if (m == 1 && ck1 && n > 1)
return true;
if (cna >= 2 && n >= 4 && ck1 && v1.back() > v2.back() && m > 1)
return true;
return false;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
for (int i = 1; i <= 8; ++i)
{
cov[(char)('1' + i)] = i;
}
cov['A'] = 13, cov['J'] = 10, cov['Q'] = 11, cov['K'] = 12, cov['T'] = 9;
cin >> tt;
for (int i = 1; i <= tt; ++i)
cout << (solve() ? "Pang\n" : "Shou\n");
}