更新于2020.8.10 已经 AC

求赞啊啊啊

粉丝群(1042840699)立的 flag:人数满 20 直播猪国杀。

虽然才 2 人,但我已经开始写了。(看我这么辛苦加一下群好不好/kel)

本文以后会同步发布于个人博客,说不定会把录的视频剪辑一下发到 B 站。

为了防止抄袭,下面的代码里所有的分号都被去掉了(for 循环的也删了)。都是我手动删的啊QwQ/dk/dk

Day 1 (2020.04.17)

啊啊啊我忘记录屏了![捂脸] 算了下次再录吧。

肝完了输入部分。

void input()
{
    scanf("%d%d", &n, &m)
    for(int i=1;i<=n;i++)
    {
        tmp = read()
        if(tmp == 'F') ++fp, p[i] = Pig(i%n+1, 2)
        else if(tmp == 'Z') p[i] = Pig(i%n+1, 1)
        else p[i] = Pig(i%n+1, 0)
        tmp = read()
        for(int j=1;j<=4;j++) p[i].cards[j] = read()
    }
    p[1].pf = 1
    for(int i=1;i<=m;i++) cs.push_back(read())
}

Day 2 (2020.04.29) 视频

今天写了一下抽卡以及测试的函数。

void get_card(int cur)
{
    p[cur].cards[p[cur].cnt] = cs.front()
    if(cs.size() > 1) cs.pop_front()
}

bool test(int cur)
{
    int nxt = p[cur].nxt
    if(p[nxt].pf == 0) return 0
    else if(p[nxt].pf == 1) return diff[p[cur].id][p[nxt].id]
    else return p[cur].id = 0
}

Day 3 (2020.04.30) 视频

写了一下攻击

int attack(int cur)
{
    if(p[cur].id == 2) return 1
    for(int nxt=p[cur].nxt nxt!=cur nxt=p[nxt].nxt)
    {
        if((p[nxt].id == 2 && p[nxt].pf == 1) || (p[nxt].id == 0 && p[nxt].pf == -1))
        {
            return nxt
        }
    }
    return -1
}

Day 4-1 (2020.05.24)

早上 NOIOL 不会做剩下题闲着的时候写的。

改了一下码风,写了几个函数,没录视频

void pend(int u, int v) {
    if(!p[u].id && p[v].id == 1) {
        for(int i=1;i<=p[u].cnt;i++) used[i] = rnds
        p[u].eq = 0
    }
    else if(p[v].id == 2) {
        for(int i=1 i<=3 i++) get_card(u)
    }
}
int find(int u, char c) {
    for(int i=1 i<=p[u].cnt i++) if(p[u].cards[i] == c) return i
    return 0
}
void remove(int u, int a, int b) {
    for(int i=a i<b i++) p[u].cards[i] = p[u].cards[i+1]
}
void peach(int u, int v) {
    int t = find(u, 'P')
    if(u == v) {
        t = 0
        for(int i=1 i<=p[u].cnt i++) {
            if(used[i] != rnds && p[u].cards[i] == 'P') {
                t = i
                break
            }
        }
        if(t) {
            used[t] = rnds
            ++p[u].hp
        }
        return
    }
    if(t) {
        ++p[u].hp
        remove(u, t, p[u].cnt)
        --p[u].cnt
    }
}
bool dodge(int u) {
    int t = find(u, 'D')
    if(t) {
        remove(u, t, p[u].cnt)
        --p[u].cnt
    }
    return t
}
bool kill(int u, int v) {
    int t = find(u, 'K')
    if(u == v) {
        t = 0
        for(int i=1 i<=p[u].cnt i++) {
            if(used[i] != rnds && p[u].cards[i] == 'K') {
                t = i
                break
            }
        }
        if(t) used[t] = rnds
        return t
    }
    if(t) {
        remove(u, t, p[u].cnt)
        --p[u].cnt
    }
    return t
}
bool wuxie(int u, int v) {
    int t = find(u, 'J')
    if(u == v) {
        t = 0
        for(int i=1 i<=p[u].cnt i++) {
            if(used[i] != rnds && p[u].cards[i] == 'J') {
                t = i
                break
            }
        }
        if(t) used[t] = rnds
        return t
    }
    if(t) {
        remove(u, t, p[u].cnt)
        --p[u].cnt
    }
    return t
}
void lose_blood(int u, int v) {
    --p[u].hp
    if(p[u].hp < 1) peach(u, v)
}
void modify(int u) {
    for(int i=1 i<=n i++) {
        if(!p[i].dead && p[i].nxt == u) {
            p[i].nxt = p[u].nxt
            break
        }
    }
}
void do_peach(int u) {
    ++p[u].hp
}
void do_kill(int u) {
    int v = p[u].nxt
    p[u].pf = 1
    if(!dodge(v)) {
        lose_blood(v, u)
        if(p[v].hp < 1) {
            if(p[v].id == 2) ++fpdead
            p[v].dead = 1
            p[u].nxt = p[v].nxt
        }
        if(fp == fpdead || p[1].dead) return
        if(p[v].hp < 1) pend(u, v)
    }
}
bool do_wuxie(int v, int u, int c, int w) {
    bool res = w;
    for(int t=u  ) {
        if(!p[t].dead) {
            if(!w) {
                if(!diff[p[t].id][p[c].id]) {
                    if(wuxie(t, v)) {
                        p[t].pf = 1
                        return do_wuxie(v, t, c, 1-w)
                    }
                }
            }
            else {
                if(diff[p[t].id][p[c].id]) {
                    if(wuxie(t, v)) {
                        p[t].pf = 1
                        return do_wuxie(v, t, c, 1-w)
                    }
                }
            }
        }
    }
    return res
}

Day 4-2 (2020.05.24)

晚上打 CF div 3 不会做闲着的时候写的。

写了个决斗函数,没录屏。

void do_fight(int u, int c, int v) {
    p[u].pf = 1
    if(p[c].pf == 1) {
        if(do_wuxie(u, u, c, 0)) return
    }
    while(true) {
        if(!p[u].id && p[c].id == 1) {
            lose_blood(c, v)
            if(p[c].hp < 1) {
                if(p[c].id == 2) {
                    ++fpdead
                }
                p[c].dead = 1
                modify(c)
            }
            if(fp == fpdead || p[1].dead) return
            if(p[c].hp < 1) pend(u, c)
            return
        }
        else if(!kill(c, v)) {
            lose_blood(c, v)
            if(p[c].hp < 1) {
                if(p[c].id == 2) {
                    ++fpdead
                }
                p[c].dead = 1
                modify(c)
            }
            if(fp == fpdead || p[1].dead) return
            if(p[c].hp < 1) pend(u, c)
            return
        }
        if (!kill(u, v)) {
            lose_blood(u, v)
            if(p[u].hp < 1) {
                if(p[u].id == 2) {
                    ++fpdead
                }
                p[u].dead = 1
                modify(u)
            }
            if(fp == fpdead || p[1].dead) return
            if(p[u].hp < 1) pend(c, u)
            return
        }
    }
}

Day 5 (2020.6.7)

写完了,TLE 0,代码暂时先不贴,调完再贴。

蒟蒻求助:猪国杀炸了怎么调

Day n (2020.8.9)

经历了 $n$ 天的自闭后,我决定重新调 bug,前 $20$ 行看到三个 bug。。

十行 $1$ bug 石锤。

改了半天的 bug 后,得到了 95pts,正在调。

Day n+1 (2020.8.10) AC

找到一堆傻逼错误,AC 了。懒得放代码了。