結果
問題 | No.274 The Wall |
ユーザー |
![]() |
提出日時 | 2023-01-10 20:20:45 |
言語 | C++17(clang) (17.0.6 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 4 ms / 2,000 ms |
コード長 | 1,508 bytes |
コンパイル時間 | 1,903 ms |
コンパイル使用メモリ | 143,872 KB |
実行使用メモリ | 6,820 KB |
最終ジャッジ日時 | 2024-12-21 12:19:00 |
合計ジャッジ時間 | 2,819 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 22 |
ソースコード
#include <cassert>#include <cmath>#include <algorithm>#include <iostream>#include <iomanip>#include <climits>#include <map>#include <queue>#include <set>#include <cstring>#include <vector>using namespace std;typedef long long ll;struct Block {int l;int r;Block(int l = -1, int r = -1) {this->l = l;this->r = r;}bool operator<(const Block &n) const {return l < n.l;}};int main() {int N, M;cin >> N >> M;vector<Block> blocks;for (int i = 0; i < N; ++i) {int l, r;cin >> l >> r;int l2 = (M - 1) - r;int r2 = (M - 1) - l;if (l < l2) {blocks.push_back(Block(l, r));} else {blocks.push_back(Block(l2, r2));}}sort(blocks.begin(), blocks.end());bool filled[M];memset(filled, false, sizeof(filled));for (Block &block : blocks) {bool ok = true;for (int i = block.l; i <= block.r; ++i) {ok &= (not filled[i]);}if (ok) {for (int i = block.l; i <= block.r; ++i) {filled[i] = true;}} else {int bl = block.l;int br = block.r;block = Block((M - 1) - block.r, (M - 1) - block.l);ok = true;for (int i = block.l; i <= block.r; ++i) {ok &= (not filled[i]);}if (ok) {for (int i = block.l; i <= block.r; ++i) {filled[i] = true;}} else {cout << "NO" << endl;return 0;}}}cout << "YES" << endl;return 0;}