結果
| 問題 | No.5024 魔法少女うなと宝集め |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-05-02 17:49:14 |
| 言語 | C++23 (gcc 15.2.0 + boost 1.89.0) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 2,000 ms |
| コード長 | 1,879 bytes |
| 記録 | |
| コンパイル時間 | 5,298 ms |
| コンパイル使用メモリ | 378,244 KB |
| 実行使用メモリ | 6,400 KB |
| スコア | 1,664,183 |
| 最終ジャッジ日時 | 2026-05-02 17:50:11 |
| 合計ジャッジ時間 | 7,559 ms |
|
ジャッジサーバーID (参考情報) |
judge2_0 / judge3_0 |
| 純コード判定しない問題か言語 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 50 |
ソースコード
#include <bits/extc++.h>
int main() {
using namespace std;
unsigned N, T;
cin >> N >> T;
vector A(N, vector<unsigned>(N));
for (auto&& row : A)
for (auto&& a : row)
cin >> a;
vector<vector<pair<unsigned, unsigned>>> idxs;
// 横
idxs.emplace_back();
idxs.back().emplace_back(0, 0);
for (unsigned i{}; i < N; i += 2) {
ranges::copy(views::iota(1U, N) | views::transform([i](const auto j){return make_pair(i, j);}), back_inserter(idxs.back()));
ranges::copy(views::iota(1U, N) | views::transform([i](const auto j){return make_pair(i + 1, j);}) | views::reverse, back_inserter(idxs.back()));
}
ranges::copy(views::iota(1U, N) | views::transform([](const auto i){return make_pair(i, 0);}) | views::reverse, back_inserter(idxs.back()));
const auto solve{[N, &A](const auto seq, unsigned T) {
vector<unsigned> sum(N * N);
for (const auto& [i, x] : seq | views::enumerate)
sum[i] = A[x.first][x.second];
for (unsigned i{}; i < N * N; ++i)
sum.emplace_back(sum[i]);
inclusive_scan(begin(sum), end(sum), begin(sum));
sum.emplace(begin(sum));
unsigned ans{}, now_idx{};
for (unsigned i{}; i < N * N; ++i) {
const auto now{sum[i + T] - sum[i]};
if (now > ans) {
ans = now;
now_idx = i;
}
}
vector<pair<unsigned, unsigned>> ret;
ret.reserve(size(seq) * 2);
ranges::copy(seq, back_inserter(ret));
ranges::copy(seq, back_inserter(ret));
return make_pair(ans, ret | views::drop(now_idx) | views::take(T) | ranges::to<vector>());
}};
const auto [ans, seq]{solve(idxs[0], T)};
cout << size(seq) << endl;
for (const auto& [i, j] : seq)
cout << i << " " << j << endl;
return 0;
}