公开 spj
  • 板块P6853 station
  • 楼主EndSaH
  • 当前回复18
  • 已保存回复18
  • 发布时间2020/10/6 22:20
  • 上次更新2023/11/5 11:45:49
查看原帖
公开 spj
91252
EndSaH楼主2020/10/6 22:20

testlib 格式。

#include "testlib.h"
#include <iostream>
#include <bitset>

using namespace std;

const int maxN = 4e3 + 5;
const int maxM = 1e6 + 5;

int n, m;
vector<int> adj[maxM];
bitset<maxN> G[maxN];

int main(int argc, char* argv[])
{
    registerTestlibCmd(argc, argv);
    n = inf.readInt(3, 4000);
    m = ouf.readInt(1, 1000000);

    static vector<bool> vis;
    static vector<int> pt;
    vis.resize(m + 1);

    for (int o = 1; o <= n; ++o)
    {
        int c = ouf.readInt(2, m);
        pt.resize(c + 1);
        for (int i = 1; i <= c; ++i)
        {
            pt[i] = ouf.readInt(1, m);
            if (vis[pt[i]])
                quitf(_wa, "output same station!");
            vis[pt[i]] = true;
        }
        for (int i = 1; i <= c; ++i)
        {
            adj[pt[i]].push_back(o);
            vis[pt[i]] = false;
        }
    }
    for (int i = 1; i <= m; ++i)
    {
        if (adj[i].size() > 3)
            quitf(_wa, "a station has more than 3 lines!");
        for (int j = 0; j < int(adj[i].size()); ++j)
            for (int k = 0; k < j; ++k)
            {
                int u = adj[i][j], v = adj[i][k];
                G[u].set(v), G[v].set(u);
            }
    }

    static bitset<maxN> tmp;
    for (int i = 1; i <= n; ++i)
    {
        tmp.reset();
        for (int j = 1; j <= n; ++j) if (G[i][j])
            tmp |= G[j];
        if ((int)tmp.count() != n)
            quitf(_wa, "illegal plan!");
    }

    // quitf(_ok, "Accepted!");

    static int point[10];
    int cnt = 0;

    for (int i = 0; i < 10; ++i)
        point[i] = ans.readInt(1, 1000000);
    for (int i = 0; i < 10; ++i)
        if (m <= point[i])
            ++cnt;
    if (cnt == 10)
        quitf(_ok, "all accepted!");
    else
        quitp(0.1 * cnt, "get %d percent", cnt * 10);

    return 0;
}
2020/10/6 22:20
加载中...