pla 5-backjun 16566カードゲーム
8834 ワード
白駿16566カードゲーム
https://www.acmicpc.net/problem/16566
方法
これは,与えられた数で入力数よりも出力が大きいという問題であり,分離セットを用いて簡単に解決した.
に答える
現在所有しているカードはusable配列でtrue、falseで使用可能かどうかを表し、現在所有しているカードの中でインデックス値より大きい数を指すように400万個のcard配列をスケッチしています.そして、数字を入力しながら、merge再帰関数で利用可能な配列をチェックし、民秀が出せるカードを見つけ、カード配列の指示値を更新します.
コード#コード#
https://www.acmicpc.net/problem/16566
方法
これは,与えられた数で入力数よりも出力が大きいという問題であり,分離セットを用いて簡単に解決した.
に答える
現在所有しているカードはusable配列でtrue、falseで使用可能かどうかを表し、現在所有しているカードの中でインデックス値より大きい数を指すように400万個のcard配列をスケッチしています.そして、数字を入力しながら、merge再帰関数で利用可能な配列をチェックし、民秀が出せるカードを見つけ、カード配列の指示値を更新します.
コード#コード#
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int cards[4000001];
bool usable[4000001];
vector<int> select_cards;
int merge(int node)
{
if (usable[cards[node]])
{
usable[cards[node]] = false;
return cards[node];
}
return cards[node] = merge(cards[node]);
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int N, M, K;
cin >> N >> M >> K;
for (int i = 0; i < M; i++)
{
int temp;
cin >> temp;
select_cards.push_back(temp);
}
sort(select_cards.begin(), select_cards.end());
int index = 1;
for (int i = 0; i < select_cards.size(); i++)
{
int cur = select_cards[i];
usable[cur] = true;
while (index <= N) {
if (index >= cur)
break;
cards[index] = cur;
index++;
}
}
while (K--)
{
int card_num;
cin >> card_num;
cout << merge(card_num) << '\n';
}
return 0;
}
Reference
この問題について(pla 5-backjun 16566カードゲーム), 我々は、より多くの情報をここで見つけました https://velog.io/@wooky9633/플래5-백준-16566-카드-게임テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol