白駿5430号(ByC++)
14212 ワード
質問する
白準アルゴリズム5430回
この問題は最初の簡単な問題より、どうして正解率がこんなに低いのですか.そして試してみるとわかります.あ、タイムアウトしたから!ハハハハ
Rが反転するたびに時間が1秒に制限されると100%タイムアウトが発生する.だからbool資料型でコードを書きました.Rを入力し、r flagがtrueであればfalse、Dを入力し、r flagがtrueであればpop back()、falseであればpop front()とします.最後に、出力前のr flagがtrueであれば逆方向に進む.これで1回反転するだけなのでタイムアウトは発生しません!
コード#コード# #include <iostream>
#include <deque>
#include <string>
#include <algorithm>
using namespace std;
int main() {
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
int t, n;
cin >> t;
string p, num;
for (int i = 0; i < t; i++) {
cin >> p >> n >> num;
deque<int> dq;
bool check = true, r = false;
int idx = 0;
while (num[idx] != NULL) {
int tmp = 0;
while (num[idx] >= '0' && num[idx] <= '9') {
if (tmp == 0)
tmp += (int)num[idx] - 48;
else {
tmp *= 10;
tmp += (int)num[idx] - 48;
}
idx++;
}
if (tmp != 0)
dq.push_back(tmp);
idx++;
}
for (int j = 0; j < p.length(); j++) {
if (p[j] == 'R') {
/* reverse를 코드로 구현해본 부분.. 아까워서 못 없앴다... 또르륵
dq2.clear();
int tmp = dq1.size();
for (int k = 0; k < tmp; k++) {
dq2.push_back(dq1.back());
dq1.pop_back();
}
// dq2를 dq1으로 복사
dq1 = dq2;
*/
// reverse(dq.begin(), dq.end());
if (!r)
r = true;
else
r = false;
} else if (p[j] == 'D') {
if (dq.empty()) {
check = false;
break;
} else if (r) {
dq.pop_back();
} else {
dq.pop_front();
}
}
}
if (!check)
cout << "error\n";
else {
cout << '[';
// r = true인 경우, reverse!
if (r)
reverse(dq.begin(), dq.end());
for (int j = 0; j < dq.size(); j++) {
if (j == dq.size() - 1)
cout << dq[j];
else
cout << dq[j] << ',';
}
cout << "]\n";
}
}
return 0;
}
Reference
この問題について(白駿5430号(ByC++)), 我々は、より多くの情報をここで見つけました
https://velog.io/@lah1203/백준-5430번by-C
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
#include <iostream>
#include <deque>
#include <string>
#include <algorithm>
using namespace std;
int main() {
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
int t, n;
cin >> t;
string p, num;
for (int i = 0; i < t; i++) {
cin >> p >> n >> num;
deque<int> dq;
bool check = true, r = false;
int idx = 0;
while (num[idx] != NULL) {
int tmp = 0;
while (num[idx] >= '0' && num[idx] <= '9') {
if (tmp == 0)
tmp += (int)num[idx] - 48;
else {
tmp *= 10;
tmp += (int)num[idx] - 48;
}
idx++;
}
if (tmp != 0)
dq.push_back(tmp);
idx++;
}
for (int j = 0; j < p.length(); j++) {
if (p[j] == 'R') {
/* reverse를 코드로 구현해본 부분.. 아까워서 못 없앴다... 또르륵
dq2.clear();
int tmp = dq1.size();
for (int k = 0; k < tmp; k++) {
dq2.push_back(dq1.back());
dq1.pop_back();
}
// dq2를 dq1으로 복사
dq1 = dq2;
*/
// reverse(dq.begin(), dq.end());
if (!r)
r = true;
else
r = false;
} else if (p[j] == 'D') {
if (dq.empty()) {
check = false;
break;
} else if (r) {
dq.pop_back();
} else {
dq.pop_front();
}
}
}
if (!check)
cout << "error\n";
else {
cout << '[';
// r = true인 경우, reverse!
if (r)
reverse(dq.begin(), dq.end());
for (int j = 0; j < dq.size(); j++) {
if (j == dq.size() - 1)
cout << dq[j];
else
cout << dq[j] << ',';
}
cout << "]\n";
}
}
return 0;
}
Reference
この問題について(白駿5430号(ByC++)), 我々は、より多くの情報をここで見つけました https://velog.io/@lah1203/백준-5430번by-Cテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol