結果
| 問題 |
No.110 しましまピラミッド
|
| コンテスト | |
| ユーザー |
otsnsk
|
| 提出日時 | 2014-12-24 15:26:46 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 5,000 ms |
| コード長 | 1,247 bytes |
| コンパイル時間 | 613 ms |
| コンパイル使用メモリ | 65,816 KB |
| 実行使用メモリ | 6,820 KB |
| 最終ジャッジ日時 | 2024-12-31 11:05:42 |
| 合計ジャッジ時間 | 1,541 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 26 |
ソースコード
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct Block {
int w;
enum Color {white, black} color;
Block(int nw=0, Color c=white): w(nw), color(c) {}
bool operator<(const Block &o) const {
return w < o.w;
}
};
vector<Block> block;
int prev[30], h[30];
int main() {
int Nw, Nb, w, N;
cin >> Nw;
block.push_back(Block(0, Block::white));
for (int i = 0; i < Nw; i++) {
cin >> w;
block.push_back(Block(w, Block::white));
}
cin >> Nb;
block.push_back(Block(0, Block::black));
for (int i = 0; i < Nb; i++) {
cin >> w;
block.push_back(Block(w, Block::black));
}
N = Nw + Nb;
sort(block.begin(), block.end());
h[0] = h[1] = 0;
for (int i = 2; i <= N + 1; i++) {
for (int j = i - 1; j >= 0; j--) {
if (block[j].color == block[i].color) continue;
if (block[j].w < block[i].w) {
h[i] = h[j] + 1;
break;
}
}
}
int ans = h[N + 1];
for (int i = N; i > 2; i--) {
if (block[N+1].color == block[i].color) continue;
ans = max(ans, h[i]);
break;
}
cout << ans << endl;
return 0;
}
otsnsk