5397番キーロック



質問リンク

コードの説明


最初はeraseを使うだけで、insertは思わずベクトルに近づいた.
タイムアウトしてnサイズとo(n^3)になることを知っています.
(erase、insertはそれぞれfor文形式であることを忘れないでください)
nは100000に制限され,1秒,2重がゲートになってもだめなので,2つのスタックで再解放する.

スタックコード


😒タイムアウトコード

#include<iostream>
#include<vector>
#include<string>
using namespace std;
vector<string> a;
vector<vector<char>> result;

int N;
vector<char> b;
int main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	result.push_back(b);
	int m = 0;
	cin >> N;
	for (int i = 0; i < N; i++) {
		string abc;
		cin >> abc;
		a.push_back(abc);
	}
	for (int j = 0; j < N; j++) {
		int k=a[j].size();
		int cursor = 0;
		for (int i = 0; i < k; i++) {
			if (a[j][i] == '<') {
				if(cursor>0)
				cursor--;
			}
			else if (a[j][i] == '>') {
				if (cursor>=result[m].size()) continue;
				cursor++;

			}
			else if (a[j][i] == '-') {
				if (cursor == 0) continue;
				if (cursor >= result[m].size()) continue;
				if (!result[m].empty()) {
					result[m].erase(result[m].begin() + (cursor-1));
					cursor--;
				}
			}
			else {
				result[m].insert(result[m].begin() + cursor, a[j][i]);
				cursor++;
			}

		}
		m++;
		result.push_back(b);
	}
	

	int total = result.size();
	for (int i = 0; i < total; i++) {
		for (int j = 0; j < result[i].size(); j++)
		{
			cout << result[i][j];
		}
		cout << endl;
	}
	


	return 0;
}