結果
| 問題 |
No.110 しましまピラミッド
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2019-03-15 15:51:52 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 5,000 ms |
| コード長 | 2,083 bytes |
| コンパイル時間 | 733 ms |
| コンパイル使用メモリ | 77,508 KB |
| 実行使用メモリ | 6,820 KB |
| 最終ジャッジ日時 | 2024-12-31 11:50:58 |
| 合計ジャッジ時間 | 1,876 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 26 |
ソースコード
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
// algorithm, vector
struct binarySearch {
/// <summary>key未満の要素を探索します</summary>
/// <returns>要素のindexが返されます</returns>
template<typename T>
static int formerLower(vector<T>& a, T key) {
return lower_bound(a.begin(), a.end(), key) - a.begin() - 1;
}
/// <summary>key以下の要素を探索します</summary>
/// <returns>要素のindexが返されます</returns>
template<typename T>
static int formerUpper(vector<T>& a, T key) {
return upper_bound(a.begin(), a.end(), key) - a.begin() - 1;
}
/// <summary>key以上の要素を探索します</summary>
/// <returns>要素のindexが返されます</returns>
template<typename T>
static int latterLower(vector<T>& a, T key) {
return lower_bound(a.begin(), a.end(), key) - a.begin();
}
/// <summary>keyより大きい要素を探索します</summary>
/// <returns>要素のindexが返されます</returns>
template<typename T>
static int latterUpper(vector<T>& a, T key) {
return upper_bound(a.begin(), a.end(), key) - a.begin();
}
};
int main() {
int Nw;
cin >> Nw;
vector<int> W(Nw);
for (int& i : W) cin >> i;
W.push_back(0);
sort(W.begin(), W.end());
int Nb;
cin >> Nb;
vector<int> B(Nb);
for (int& i : B) cin >> i;
B.push_back(0);
sort(B.begin(), B.end());
bool tmp1 = false;
int sum1 = 0, tmp2 = W[W.size() - 1];
while (true) {
++sum1;
if (tmp1) {
tmp2 = W[binarySearch::formerLower(W, tmp2)];
if (tmp2 == 0) break;
tmp1 = false;
}
else {
tmp2 = B[binarySearch::formerLower(B, tmp2)];
if (tmp2 == 0) break;
tmp1 = true;
}
}
int sum2 = 0;
tmp1 = true;
tmp2 = B[B.size() - 1];
while (true) {
++sum2;
if (tmp1) {
tmp2 = W[binarySearch::formerLower(W, tmp2)];
if (tmp2 == 0) break;
tmp1 = false;
}
else {
tmp2 = B[binarySearch::formerLower(B, tmp2)];
if (tmp2 == 0) break;
tmp1 = true;
}
}
cout << max(sum1, sum2);
}