提出 #56158689


ソースコード 拡げる

#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>>;

    const std::vector<std::pair<Num, Num>> dyxs {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
    std::map<char, std::pair<Num, Num>> directions {{'D', {1, 0}}, {'U', {-1, 0}}, {'R', {0, 1}}, {'L', {0, -1}}};

    template<typename T>
    void print_oneline(const std::vector<T>& vec, std::ostream& os) {
        const auto size = vec.size();
        for(size_t i{0}; i<size; ++i) {
            os << vec.at(i) << (((i+1) == size) ? '\n' : ' ');
        }
    }

    template<typename T>
    void print_each(const std::vector<T>& vec, std::ostream& os) {
        const auto size = vec.size();
        for(size_t i{0}; i<size; ++i) {
            os << vec.at(i) << '\n';
        }
    }
}

void solve(std::istream& is, std::ostream& os) {
    Num n,d;
    is >> n >> d;

    if ((n - 1) < (2 * d)) {
        os << "No\n";
        return;
    }

    if ((n - 1) == (2 * d)) {
        os << "Yes\n";
        for(Num i{1}; i<=n; ++i) {
            for(Num j{i+1}; j<=n; ++j) {
                os << i << " " << j << "\n";
            }
        }
        return;
    }

    std::vector<std::pair<Num,Num>> ps;
    for(Num dist{1}; dist<=d; ++dist) {
        const auto len = std::lcm(dist, n) / dist;
        const auto n_cycle = n / len;
        for(Num ofs{0}; ofs<n_cycle; ++ofs) {
            Num from = ofs;
            for(Num i{0}; i<len; ++i) {
                const Num to = (from + dist) % n;
                ps.push_back(std::make_pair(from+1, to+1));
                from = to;
            }
        }
    }

    os << "Yes\n";
    for(const auto& [from, to] : ps) {
        os << from << " " << to << "\n";
    }
}

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

提出情報

提出日時
問題 D - Everywhere is Sparser than Whole (Construction)
ユーザ zettsut
言語 C++ 20 (gcc 12.2)
得点 500
コード長 2340 Byte
結果 AC
実行時間 9 ms
メモリ 4384 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 500 / 500
結果
AC × 2
AC × 36
セット名 テストケース
Sample 00-sample-001.txt, 00-sample-002.txt
All 00-sample-001.txt, 00-sample-002.txt, 01-001.txt, 01-002.txt, 01-003.txt, 01-004.txt, 01-005.txt, 01-006.txt, 01-007.txt, 01-008.txt, 01-009.txt, 01-010.txt, 01-011.txt, 01-012.txt, 01-013.txt, 01-014.txt, 01-015.txt, 01-016.txt, 01-017.txt, 01-018.txt, 01-019.txt, 01-020.txt, 01-021.txt, 01-022.txt, 01-023.txt, 01-024.txt, 01-025.txt, 01-026.txt, 01-027.txt, 01-028.txt, 01-029.txt, 01-030.txt, 01-031.txt, 01-032.txt, 01-033.txt, 01-034.txt
ケース名 結果 実行時間 メモリ
00-sample-001.txt AC 1 ms 3644 KiB
00-sample-002.txt AC 1 ms 3452 KiB
01-001.txt AC 1 ms 3688 KiB
01-002.txt AC 1 ms 3640 KiB
01-003.txt AC 1 ms 3508 KiB
01-004.txt AC 1 ms 3560 KiB
01-005.txt AC 1 ms 3644 KiB
01-006.txt AC 1 ms 3512 KiB
01-007.txt AC 1 ms 3456 KiB
01-008.txt AC 1 ms 3492 KiB
01-009.txt AC 1 ms 3548 KiB
01-010.txt AC 1 ms 3544 KiB
01-011.txt AC 1 ms 3496 KiB
01-012.txt AC 1 ms 3544 KiB
01-013.txt AC 1 ms 3624 KiB
01-014.txt AC 1 ms 3508 KiB
01-015.txt AC 1 ms 3628 KiB
01-016.txt AC 1 ms 3748 KiB
01-017.txt AC 2 ms 3772 KiB
01-018.txt AC 1 ms 3456 KiB
01-019.txt AC 8 ms 4384 KiB
01-020.txt AC 8 ms 4112 KiB
01-021.txt AC 8 ms 4192 KiB
01-022.txt AC 8 ms 4160 KiB
01-023.txt AC 8 ms 4156 KiB
01-024.txt AC 8 ms 4124 KiB
01-025.txt AC 8 ms 4296 KiB
01-026.txt AC 8 ms 4292 KiB
01-027.txt AC 1 ms 3504 KiB
01-028.txt AC 9 ms 4208 KiB
01-029.txt AC 1 ms 3480 KiB
01-030.txt AC 8 ms 4156 KiB
01-031.txt AC 1 ms 3488 KiB
01-032.txt AC 7 ms 3484 KiB
01-033.txt AC 1 ms 3552 KiB
01-034.txt AC 8 ms 4240 KiB