ec final游记

今晚看见ec上gym了,也是时候写写游记了

E
E. Prof. Pang and Poker

开场有人开了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");
}
上一篇
下一篇