QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#815929#1127. Virus Experiment_8_8_6 20ms27076kbC++236.7kb2024-12-15 18:57:442024-12-15 18:57:45

Judging History

This is the latest submission verdict.

  • [2024-12-15 18:57:45]
  • Judged
  • Verdict: 6
  • Time: 20ms
  • Memory: 27076kb
  • [2024-12-15 18:57:44]
  • Submitted

answer

#include <bits/stdc++.h>
    
using namespace std;
    
typedef long long ll;

const int  N = (int)1e6 + 12, MOD = 998244353, maxn = 805;

const int dx[] = {1, 0, -1, 0}, dy[] = {0, 1, 0, -1};
int n, r, c, u[maxn][maxn], mx = 0, e[N];
string s;
vector<int> w[N];
int o;
int conv(int x, int y) {
    return (x - 1) * c + y;
}
bool bl[N];
int lst_a = -1;
pair<int, int> ob[N];
void prec() {
    cin >> s;
    for(int i = 1; i <= r; i++) {
        for(int j = 1; j <= c; j++) {
            cin >> u[i][j];
            if(!u[i][j]) {
                u[i][j] = (int)1e9;
                bl[conv(i, j)] = 1;
            }
            ob[conv(i, j)] = {i, j};
        }
    }
    for(int i = 0; i < n; i++) {
        if(s[i] == 'N') {
            e[i] = 0;
        } else if(s[i] == 'S') {
            e[i] = 2;
        } else if(s[i] == 'E') {
            e[i] = 3;
        } else {
            e[i] = 1;
        }
    }
    for(int i = 1; i < (1 << 4); i++) {
        vector<int> f;
        for(int j = 0; j < n; j++) {
            if(!((i >> e[j]) & 1)) f.push_back(j);
        }
        int mx = 0;
        if(f.empty()) { 
            mx = (int)1e6;
        } else {
            mx = f[0] + (n - 1 - f.back());
            for(int l = 1; l < (int)f.size(); l++) {
                mx = max(mx, f[l] - f[l - 1] - 1);
            }
        }
        for(int x = 1; x <= r; x++) {
            for(int y = 1; y <= c; y++) {
                if(u[x][y] > mx) continue;
                bool ok = 1;
                if(x == r || x == 1 || y == 1 || y == c) {
                    for(int j = 0; j < 4; j++) {
                        if((i >> j) & 1) {
                            int kx = x - dx[j], ky = y - dy[j];
                            if(kx >= 1 && kx <= r && ky >= 1 && ky <= c) {
                            } else {
                                ok = 0;
                                break;
                            }
                        }
                    }
                }
                if(!ok) continue;
                w[conv(x, y)].push_back(i);
            }
        }
    }
    n = r * c;
}
bool is[N];
int p[N], pr[N], bfc[N];
vector<vector<int>> g;
int us[N], timer, m;

int ve[N];
bool sk[N][16];
int ch = 0;
void make(int tc) {
    timer++;
    for(int i = 1; i <= n; i++) {
        bfc[i] = 0;
    }
    ch = 0;
    for(int i = 1; i <= n; i++) {
        if(bl[i]) {
            continue;
        }
        vector<int> nw;
        for(auto f : w[i]) {
            if(sk[i][f]) {
                continue;
            }
            int lst = -1;
            auto [x, y] = ob[i];
            int it =0 ;
            for(int j = 0; j < 4; j++) {
                if((f >> j) & 1) {
                    int kx = x - dx[j], ky = y - dy[j];
                    if(kx >= 1 && kx <= r && ky >= 1 && ky <= c) {
                        int k = conv(kx, ky);
                        ve[it++] = k;
                    }
                }
            }
            for(int _ = 0; _ < it; _++) {
                int j = ve[_];
                if(lst == -1) {
                    lst = p[j];
                } else {
                    if(lst != p[j]) {
                        lst = -2;
                        break;
                    }
                }
            }
            if(lst == -2) {
                // nw.push_back(f);
                continue;
            }
            if(lst == p[i]) {
                sk[i][f] = 1;
                continue;
            }
            if(is[lst] && pr[p[i]] != lst) {
                if(us[lst] != timer) {
                    us[lst] = timer;
                    g[lst].push_back(p[i]);
                    sk[i][f] = 1;
                    ch = 1;
                } else {
                    // nw.push_back(f);
                }
            } else {
                g[lst].push_back(p[i]);
                ch = 1;
                sk[i][f] = 1;
            }
        }
        // w[i].swap(nw);
    }
    // return;
    vector<vector<int>> gt(n + 1);
    vector<pair<int, int>> ed;
    for(int i = 1; i <= m; i++) {
        for(int to : g[i]) {
            gt[to].push_back(i);
            ed.emplace_back(i, to);
        }
    }
    vector<int> ord;
    vector<bool> vis(m + 1, 0);
    function<void(int)> dfs = [&](int v){
        vis[v] = 1;
        for(int to : g[v]) {
            if(!vis[to]) {
                dfs(to);
            }
        }
        ord.push_back(v);
    };
    function<void(int, int)> dfs1 = [&](int v, int cl) {
        bfc[v] = cl;
        for(int to : gt[v]) {
            if(!bfc[to]) {
                dfs1(to, cl);
            }
        }  
    };
    for(int i = 1; i <= m; i++) {
        if(!vis[i]) {
            dfs(i);
        }
    }
    reverse(ord.begin(), ord.end());
    int t = 0;
    for(int i : ord) {
        if(!bfc[i]) {
            dfs1(i, ++t);
        }
    }
    m = t;
    vector<vector<int>> G(m + 1), GT(m + 1);
    for(int i = 1; i <= n; i++) {
        p[i] = bfc[p[i]];
    }
    for(auto [x, y] : ed) {
        if(bfc[x] != bfc[y]) {
            G[bfc[x]].push_back(bfc[y]);
            GT[bfc[y]].push_back(bfc[x]);
        }
    }
    g.swap(G);
    for(int i = 1; i <= m; i++) {
        pr[i] = 0;
    }
    function<void(int, int)> go = [&](int v, int val) {
        pr[v] = val;
        for(int to : GT[v]) {
            if(!pr[to]) {
                go(to, val);
            }
        }
    };
    for(int i = 1; i <= m; i++) {
        if(g[i].empty()) {
            go(i, i);
            is[i] = 1;
        } else {
            is[i] = 0;
        }
    }
}
int col[N];
bool bl1[N];
void test() {
    cin >> n >> r >> c;
    int nn = n;
    prec();
    m = n;
    g.resize(n + 1);
    for(int i = 1; i <= n; i++) {
        pr[i] = p[i] = i;
        is[i] = 1;
    }
    ch = 1;
    for(int i = 0; i < 20; i++) {
        make(0);
    }
    for(int i = 1; i <= n; i++) {
        if(!is[p[i]]) continue;
        col[p[i]]++;
        if(bl[i]) {
            bl1[p[i]] = 1;
        }
    }
    vector<int> r;
    for(int i = 1; i <= m; i++) {
        if(is[i] && !bl1[i]) {
            r.push_back(col[i]);
        }
    }
    int res = 0;
    sort(r.begin(), r.end());
    for(int i = 0; i < (int)r.size() && r[i] == r[0]; i++) {
        res += r[0];
    }
    cout << r[0] << '\n' << res << '\n';
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    o = clock();
    int t = 1;
    // cin >> t;

    while(t--) {
        test();
    }
    // cout << (clock() - o) * 1.0 / CLOCKS_PER_SEC;
}   

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 0
Time Limit Exceeded

Test #1:

score: 14
Accepted
time: 0ms
memory: 26452kb

input:

53768 10 50
EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE...

output:

1
10

result:

ok 2 lines

Test #2:

score: 0
Time Limit Exceeded

input:

10 800 800
WWWWEWWEWW
7 3 7 5 10 6 9 6 5 8 1 10 1 6 6 1 8 9 3 7 1 3 1 4 9 3 4 2 5 4 5 7 8 10 4 6 2 8 7 2 1 5 3 10 9 10 1 7 6 2 1 8 3 4 10 5 3 3 3 9 2 2 6 1 6 5 6 3 7 9 7 5 8 5 4 3 7 6 9 3 4 9 1 2 7 1 3 4 6 10 8 4 4 9 1 2 6 1 4 4 10 6 10 4 1 5 1 8 5 2 1 9 4 10 9 2 7 9 4 1 6 5 1 6 6 10 10 1 3 10 6 4 8...

output:


result:


Subtask #2:

score: 6
Accepted

Test #9:

score: 6
Accepted
time: 0ms
memory: 26284kb

input:

10 10 10
NNNNSENESS
3 2 0 0 1 3 2 3 1 2
3 3 2 0 5 2 4 0 5 1
5 1 2 3 0 4 4 0 1 0
5 0 1 0 2 4 2 2 0 3
0 1 0 1 4 0 1 4 1 0
3 5 5 0 2 5 3 0 3 4
5 3 1 0 5 4 4 0 4 4
1 0 2 0 5 4 0 2 3 0
4 2 0 2 3 0 2 5 5 4
3 0 2 0 5 4 5 4 0 5

output:

1
33

result:

ok 2 lines

Test #10:

score: 6
Accepted
time: 0ms
memory: 24692kb

input:

100000 10 10
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN...

output:

1
10

result:

ok 2 lines

Test #11:

score: 6
Accepted
time: 7ms
memory: 26816kb

input:

100000 11 11
SWNESSSWNSEWNSNESSNWEWEWNSNNSWSSWSEEWNENWSWNNEWWSWNSESSEWENNESSENEEEESEESEWENEWSNSNNSSNNSWSNNSNESWEWSENNSESEEWWNESSNNWWSNWNNWNWNWWSEENNNWESSWNWNSEWWNWNNWSWSEWSENSNWNWNNEESSSENWWESSWEESWWENSSENWNNEESWENWSSSWEEWNWEWNNENNWSWEWSNNEESESNWNSEEENWWESSWEEWWSWESSNNEEWWNSSWSNEWSENSNNSENNSSNSSEEEE...

output:

27
27

result:

ok 2 lines

Test #12:

score: 6
Accepted
time: 7ms
memory: 26744kb

input:

100000 10 10
EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE...

output:

1
16

result:

ok 2 lines

Test #13:

score: 6
Accepted
time: 3ms
memory: 22668kb

input:

100000 1 1
WWSSSWEEEEESSNSSSSENWSESSNSWWSWESWSEEWSNSSEESSWESNNNENENWEENSSSSSNENESEESEWWSNNWSEWSWNWESSWNWSEESNSWSWENWEWNWESEWSSNSWENEWNNSWEEWWSSSWNSNWWWNSSWSSNSENESENNNENWESSENNEWENWEENWNWSSSWWWSNWESWEESNNNESNNEESNEWSSNNSSWSSESNSNNWENENEWWWSEESNWEWWNWNNSSNEEWSWNSWEESNSNSNEWNNWWWWSSWSWWESWWENSENWNWNWN...

output:

1
1

result:

ok 2 lines

Test #14:

score: 6
Accepted
time: 3ms
memory: 25500kb

input:

100000 50 50
ENWNNWEESNSNSSESSWNEWWESNWEENNEEWWEWNNESSSEWSWNWEWSSNEEWNSEWSSWNESWSWESEWWSENEWESEWSWSNNWWESSSWSSSESESNSSNESSSWSNWSSSENSWWNWNWNNNSNSNSEENWESENEENNESENSENNWEEESENWSESWSNWNNNSNSNWWENWEEEWSNWWEWSWNSEEEWEWWNSWNNNWWENSNSWWSNNWESNSSSWWNSEWSNWNEEESSEWEESENEESWSNNWSNESEESWEESNWSEEWWSSWESENESSSE...

output:

2500
2500

result:

ok 2 lines

Test #15:

score: 6
Accepted
time: 5ms
memory: 24116kb

input:

100 10 10
NENNWNSNNEWNENENNWWNEWNSNWWSSSNSNESSESWESSNNNNEWSWESNSNWSENWNSESNENWSWEWWWNSNWNWESNSESENNWNNWSSWSNSE
2 1 4 1 4 2 1 3 2 4
1 4 4 4 3 3 4 2 2 1
1 3 1 4 2 2 1 4 2 2
2 3 4 3 3 3 1 2 4 1
2 2 3 4 3 4 4 1 3 4
1 4 4 3 4 4 1 4 4 2
1 4 3 4 1 1 3 3 4 3
4 4 1 2 3 3 2 3 4 4
2 4 2 1 1 3 4 2 4 4
2 1 2 3 4...

output:

1
1

result:

ok 2 lines

Test #16:

score: 6
Accepted
time: 6ms
memory: 27036kb

input:

100000 50 2
ESNNNSWNNESEWSWWWSENWENSWSNSENSWSENWWNEENNWWNESWNWSEWSWWNSSWSSNENSWWWEEEEENSNWWNNESEWSSNSEEENWWNWWNEENSENWSWEWWNNWWNESSSNWNWWSEWEESESNEEEWNNWWEEEESWSEWWNNSNENWWSEEWNWSNWWEEWNSNWWWWWNWWNNSENNEWSEWENSSSSNWSSSNWSNSNEWESEESWWSEEWWWNWWNESNSNSSNEEWSSENNNEEENSNEEEESNSWNNESEENNEESNSSWENSWSWSNSEE...

output:

46
46

result:

ok 2 lines

Test #17:

score: 6
Accepted
time: 4ms
memory: 24676kb

input:

100 47 41
WWENEWENESSWWNESSENWNEWESWNWESNWNWSEWNEWNSWENSWSNNSWWNNENEWNWWWSWSSESSNEEWEENWEWNWENENESEENNWWWNSWEW
1 2 1 1 2 10 1 2 1 1 2 8 2 2 1 1 1 8 1 1 1 2 2 9 2 1 1 1 1 9 2 1 2 2 2 9 1 2 2 2 2
1 1 1 2 1 9 1 2 2 2 2 9 2 1 2 2 2 9 2 1 1 2 1 9 1 1 1 2 1 8 1 2 2 1 1 10 2 2 2 1 1
2 2 1 2 10 1 2 2 1 1 10...

output:

28
56

result:

ok 2 lines

Test #18:

score: 6
Accepted
time: 5ms
memory: 24392kb

input:

100000 10 10
SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS...

output:

1
10

result:

ok 2 lines

Test #19:

score: 6
Accepted
time: 17ms
memory: 24892kb

input:

10 50 50
ESSSSSSSEE
4 2 10 7 7 1 8 1 2 4 8 4 4 2 9 7 3 9 7 3 9 3 4 6 7 2 5 2 4 8 5 2 2 10 10 6 2 1 1 5 10 7 3 10 10 10 6 8 7 7
9 3 9 6 1 7 10 9 8 7 2 1 10 8 4 4 10 8 10 5 2 7 6 6 3 10 2 4 1 3 3 2 8 3 9 1 7 2 3 8 7 7 1 5 3 7 5 2 10 5
1 2 10 1 1 4 1 5 1 10 10 10 10 2 7 5 1 8 8 5 5 3 4 5 1 3 5 6 1 6 8 ...

output:

1
545

result:

ok 2 lines

Test #20:

score: 6
Accepted
time: 2ms
memory: 24792kb

input:

100 50 50
WWWNSWNWWESSSESNEWESENENWESESSEENNWNWNSWESENEEEESWEENWSWWWWNEENEEWSSWNWNWNEESEEENWENSENSESSSWNWSSNSW
1 1 2 1 2 1 1 2 1 2 2 1 2 2 2 1 1 2 2 2 1 8 2 1 2 2 2 1 2 1 1 2 2 2 1 1 1 1 2 1 1 2 1 1 1 2 1 2 2 2
1 2 1 1 1 2 2 1 1 2 2 1 2 1 2 1 2 1 1 1 2173 2 2 1 1 2 1 2 1 2 1 1 2 2 2 2 1 1 1 1 1 1 1 ...

output:

2500
2500

result:

ok 2 lines

Test #21:

score: 6
Accepted
time: 18ms
memory: 25012kb

input:

100000 50 50
WWSNNSSSSSSSWWWSWSNNNNSSNNSSNWWNSSNNNSSSSWSWWSNNSNWSNWNWNWSSWWNWWNNSWWSSSWSNWNWSWWNNNNWSSSNSSNNNSSSNSWSWSWWWWSSNNNSWNSNSSSWSWNNWNSNNWSNWSSSWSWWSWNWSWWNNNSSWWSNWSWSNWNNWNSNSSSNNNNWNSWWWNNSWNWWNNSWWNNWNWSNSSWNWNWWWSNSWSNWNSWSWSNWNNNWNSNSSWWNSNWSWNWNSWNNSSWNSNNWSNSWWWWSSWSNNNNSSWWWWNSWNWSW...

output:

50
50

result:

ok 2 lines

Test #22:

score: 6
Accepted
time: 19ms
memory: 27076kb

input:

100000 50 50
SWSSSNWSNWNNNSNSSSNNSWNNWNWWNSNNNSNNWNNSNWNWSNSWWNSWWNSSWNWNWSWNNSSNNWSWSNNNNWWSNSSSSWSSWWSNNWWSNNWSSSSSSWNNWSWWSWWWWNSNSNWWWSSWWNNSSWSNWNSNSNNSWSWWWNSWWNSNSSNSWSNNSWNWSSNWWSSSNWNWSWSNSNSSWWNNWWWWNNNSWWWNWWNSWWNNWSNNSNNWNSSNWWNNSSNSSNSSSNWSNSSWWWNNNSSWSWNNSNSNWSNSNSSWSSSSWSWNNNNWSWWSNNW...

output:

1
3

result:

ok 2 lines

Test #23:

score: 6
Accepted
time: 11ms
memory: 25056kb

input:

100000 50 50
NNEENENWWNWNNEEWNNWWWWNENNWWNENWNNWNNWWENEENNNEEEWENEENENWNEEEENNEWEWEWNNWNNNEWNWEWNNENWWWWWEENNNNENWWWNENNENENWENNWNWEEEEEWNWWWEWWEWENEENNWEEWWWEEENWNNEENEEEEEWWWWEEEEWWWEEEEWWNNNNEEEWNEWEWENEWEWNEEWNWENWNWEWENNENNWNWEWWENNEWNNNNNNNENNENNNNWEENNNWWWWNNENEEEWNWNWEWNNWNNENWWWWNWNEENWWWEN...

output:

50
50

result:

ok 2 lines

Test #24:

score: 6
Accepted
time: 20ms
memory: 25032kb

input:

100000 50 50
SESWSSWEWEWSWESWEEEWESESSEWEWWSEEEWSESEWSESWWSWEWSSSWSEWESSWSSWSWWWWESEEWEWEWEEEWEEEWWSEEESSEESEEWSESSWEEEWWWSEWSWWSEWSWWEESSWSEEEEEWSSWEWEEESEEWSSWSEWESEWSSEWWSWEWSWESESEEWEEEWESWEESWSESWWSWSWEWESWESEESESSWSESESESSEEWWSSWESEWSWSSSEWWWWSSESSSEESSWWWSEWSSSSESWSSSSEESWSSEWSSSEEESWESWSEEWE...

output:

1
37

result:

ok 2 lines

Test #25:

score: 6
Accepted
time: 17ms
memory: 26848kb

input:

50000 50 49
SNNWEENNESEEEWSESNWSENSSWNWWENENWWEWSEWEEENSNSWEEEESENEEENNSSSESSNEEWSWEWWNSSWNNNSNNNWSSSNEWSSSESWSSWNSSESSNESESWESSWWSEENWENWWENWEWWNNWNWNWEESSSEWWSSSWNSEESWEENNENWEWNNEESSNWSNWSWWWSENWSESSNNNSESNESNSNSWSSNNSNWWEEESESSNNESSWNEENWEESESWSNWNENWNENEEENNSEEESEWENSESWENENSENSWNEEEEWNNSWNNSNN...

output:

3
915

result:

ok 2 lines

Test #26:

score: 6
Accepted
time: 5ms
memory: 26688kb

input:

2000 50 50
NNWSNWWSWNNSNWNNNENWNSWSENSWWSNWNWSSSWNESNSWSENWSNWWSWWENWSWNENWSWENSSSSWNWSNWESWNSNWESSEEEEEESNWNNESENNWNNESNSWNNNNESSWNNENEWSNESSNWNNENEEWWEWNEWNSSWSSSEWEESSNEWSEWNSSSWWSNEWEEWESENNSNSNWSWWENNWNSWSWNESEWNEWESWESSESWNEWNESNNWESSSSENSSSESNWNSNWSNNSESESSSNWNEEWNWSNNWEEWSEWEENSNWSESSESEWENN...

output:

50
1400

result:

ok 2 lines

Test #27:

score: 6
Accepted
time: 12ms
memory: 27008kb

input:

100000 50 50
NNNNSENESSEEWWNSESWWNNEEWSEWSEWNWNEESWNEENWWNNWWEWWNNENNWSWSNNEENWSNSSNSNSSNSSWESWEWSWWSENWNWSENWWWSSESENNWNNWESNWEEESNESSWEWSSNESSEEEEWEWESNSNWEEWNWNSENSSNNESEEWESENENESSNNSWWEWWNWNEWENSNWENWEENNNSWSENWWSWENNWSESNSNSWSSSENSSSENNWWEESENSSNESNNSESNNWNWNEESEWWSEWWESEWSEEWWSSNENSNWWSNEENEW...

output:

1
2262

result:

ok 2 lines

Subtask #3:

score: 0
Skipped

Dependency #1:

0%