[白俊2493]塔
16770 ワード
https://www.acmicpc.net/problem/2493
N個のタワーの高さをN回入力してスタックに保存し、現在のスタックの上部の値を上部の下の値と比較し、上部の値が大きい場合、popは上部の値が小さくなるまで保存します.最初のtopの値が現在のtopの値より小さい場合は、インデックスを保存し、前にポップアップした値をスタックに再配置します.
筆者は上記の形式をスタックに繰り返して空にし,結果としてタイムアウトを招いた.スタックを減少させ、増加させる過程で発生する可能性があります.
スタックに予めN個のタワーの高さを入力して処理するのではなく,入力のたびにプロセスを処理する.stackにすでに値が存在する場合は、現在入力されている値よりもstackに存在する値が大きい場合は、すぐにインデックス値が出力されます.stackが空の場合は最初の入力ですが、それ以前は入力されていなかったので0を出力します.
▼▼初めて近づく
N個のタワーの高さをN回入力してスタックに保存し、現在のスタックの上部の値を上部の下の値と比較し、上部の値が大きい場合、popは上部の値が小さくなるまで保存します.最初のtopの値が現在のtopの値より小さい場合は、インデックスを保存し、前にポップアップした値をスタックに再配置します.
筆者は上記の形式をスタックに繰り返して空にし,結果としてタイムアウトを招いた.スタックを減少させ、増加させる過程で発生する可能性があります.
#include <bits/stdc++.h>
using namespace std;
int main(void){
int input;
scanf("%d",&input);
stack<int> s;
int res[input], index = 0;
fill(res, res+input, 0);
int N = input;
while(input--) {
int num;
scanf("%d",&num);
s.push(num);
}
vector<int> v;
while(true) {
int value = s.top();
int cnt = s.size();
s.pop();
while(true) {
--cnt;
if(s.empty()) {
for(int i = v.size()-1; i >= 0; i--) {
s.push(v[i]);
}
res[index++] = cnt;
v.clear();
break;
}
if(value > s.top()) {
v.push_back(s.top());
s.pop();
}
else {
for(int i = v.size()-1; i >= 0; i--) {
s.push(v[i]);
}
res[index++] = cnt;
v.clear();
break;
}
}
if(index == N) {
break;
}
}
for(int i = index - 1; i >= 0; i--) {
printf("%d ",res[i]);
}
return 0;
}
▼2度目の接近
スタックに予めN個のタワーの高さを入力して処理するのではなく,入力のたびにプロセスを処理する.stackにすでに値が存在する場合は、現在入力されている値よりもstackに存在する値が大きい場合は、すぐにインデックス値が出力されます.stackが空の場合は最初の入力ですが、それ以前は入力されていなかったので0を出力します.
#include <bits/stdc++.h>
using namespace std;
int main(void){
ios::sync_with_stdio(0);
cin.tie(0);
int N, value, index = 0;
cin >> N;
stack<int> s;
int arr[N+1];
fill(arr,arr+N+1,0);
for(int i = 0; i < N; i++) {
cin >> value;
while(!s.empty()) {
if(arr[index] >= value) {
cout << s.top() << ' ';
break;
}
else {
s.pop();
--index;
}
}
if(s.empty()) {
cout << "0 ";
}
++index;
s.push(i+1);
arr[index] = value;
}
return 0;
}
Reference
この問題について([白俊2493]塔), 我々は、より多くの情報をここで見つけました https://velog.io/@eunsung-dev/백준-2493-탑テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol