Submission #50726374


Source Code Expand

#include <bits/stdc++.h>
#include <atcoder/modint>

namespace {
    using ModInt [[maybe_unused]] = atcoder::modint998244353;
    using Num [[maybe_unused]] = long long int;
    using Vec [[maybe_unused]] = std::vector<Num>;
    using Set [[maybe_unused]] = std::set<Num>;
    using Mset [[maybe_unused]] = std::multiset<Num>;
    using Edges [[maybe_unused]] = std::vector<std::vector<Num>>;

    template<typename T>
    using Q [[maybe_unused]] = std::queue<T>;

    template<typename T>
    using PQ [[maybe_unused]] = std::priority_queue<T, std::vector<T>, std::greater<T>>;
}

void solve(std::istream& is, std::ostream& os) {
    Num loop {0};
    is >> loop;

    while(loop-- > 0) {
        Num n, k;
        std::string s;
        is >> n >> k >> s;

        char prev = '0';
        std::vector<std::pair<Num, Num>> runs;
        Num n_ones {0};

        for(size_t i{0}; i<s.size(); ++i) {
            const auto c = s.at(i);
            if (c != '0') {
                if (prev == '0') {
                    runs.push_back(std::make_pair(i, 1));
                } else {
                    runs.back().second += 1;
                }
            }

            n_ones += (c == '1');
            prev = c;
        }

        std::vector<size_t> ids;
        for(size_t i{0}; i<runs.size(); ++i) {
            const auto& [left, len] = runs.at(i);
            Num n1 {0};
            for(Num j{left}; j<(left+len); ++j) {
                n1 += (s.at(j) == '1');
            }
            if (n1 > 0) {
                ids.push_back(i);
            }
        }

        if (ids.size() > 1) {
            os << "No\n";
            continue;
        }

        Num found {0};
        for(size_t id{0}; id<runs.size(); ++id) {
            const auto& [left, len] = runs.at(id);
            if (len < k) {
                continue;
            }

            if (!ids.empty() && (ids.at(0) != id)) {
                continue;
            }

            Vec cumsum {0};
            for(Num i{left}; i<(left+len); ++i) {
                Num b = 0 + (s.at(i) == '1');
                cumsum.push_back(cumsum.back() + b);
            }

            for(Num i{0}; i<=(len-k); ++i) {
                const Num left = cumsum.at(i);
                const Num right = cumsum.back() - cumsum.at(i+k);
                if ((left == 0) && (right == 0)) {
                    ++found;
                }
            }
        }

        if (found == 1) {
            os << "Yes\n";
        } else {
            os << "No\n";
        }
    }
}

int main(void) {
    solve(std::cin, std::cout);
    return 0;
}

Submission Info

Submission Time
Task A - Continuous 1
User zettsut
Language C++ 20 (gcc 12.2)
Score 300
Code Size 2699 Byte
Status AC
Exec Time 28 ms
Memory 7840 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 300 / 300
Status
AC × 1
AC × 26
Set Name Test Cases
Sample 00-sample-001.txt
All 00-sample-001.txt, 01-all-001.txt, 01-all-002.txt, 01-all-003.txt, 01-all-004.txt, 02-multi-001.txt, 02-multi-002.txt, 02-multi-003.txt, 02-multi-004.txt, 02-multi-005.txt, 02-multi-006.txt, 02-multi-007.txt, 02-multi-008.txt, 02-multi-009.txt, 02-multi-010.txt, 03-max-001.txt, 03-max-002.txt, 03-max-003.txt, 03-max-004.txt, 03-max-005.txt, 03-max-006.txt, 03-max-007.txt, 03-max-008.txt, 04-test-001.txt, 04-test-002.txt, 04-test-003.txt
Case Name Status Exec Time Memory
00-sample-001.txt AC 1 ms 3492 KiB
01-all-001.txt AC 8 ms 3456 KiB
01-all-002.txt AC 22 ms 3404 KiB
01-all-003.txt AC 12 ms 3456 KiB
01-all-004.txt AC 28 ms 3504 KiB
02-multi-001.txt AC 7 ms 4152 KiB
02-multi-002.txt AC 6 ms 4296 KiB
02-multi-003.txt AC 7 ms 4212 KiB
02-multi-004.txt AC 6 ms 4236 KiB
02-multi-005.txt AC 6 ms 4132 KiB
02-multi-006.txt AC 6 ms 3888 KiB
02-multi-007.txt AC 6 ms 3812 KiB
02-multi-008.txt AC 6 ms 3900 KiB
02-multi-009.txt AC 6 ms 3740 KiB
02-multi-010.txt AC 6 ms 4116 KiB
03-max-001.txt AC 7 ms 5664 KiB
03-max-002.txt AC 8 ms 6184 KiB
03-max-003.txt AC 6 ms 4708 KiB
03-max-004.txt AC 8 ms 5888 KiB
03-max-005.txt AC 8 ms 7840 KiB
03-max-006.txt AC 8 ms 7676 KiB
03-max-007.txt AC 5 ms 3812 KiB
03-max-008.txt AC 7 ms 5736 KiB
04-test-001.txt AC 8 ms 7780 KiB
04-test-002.txt AC 8 ms 7784 KiB
04-test-003.txt AC 8 ms 7832 KiB