JD_タイトル1512——2つのスタックでキューを実現する

1771 ワード

タイトル1512:2つのスタックでキューを実現
時間制限:1秒
メモリ制限:128メガ
特殊問題:いいえ
コミット:2907
解決:983
タイトルの説明:
2つのスタックで1つのキューを実現し、キューのPushとPop操作を完了します.キュー内の要素はintタイプです.
 
入力:
各入力ファイルには、テストサンプルが含まれています.各テストサンプルについて、最初の行には、キュー操作の個数を表すn(1<=n<=10000000)が入力される.次のn行、各行にキュー操作を入力:1.PUSH Xはキュー内のpushの整数x(x>=0)2.POPがキューからpopする数.
 
出力:
各テストケースに対応して、すべてのpop操作のキューpopからの数値を印刷します.pop操作を実行するときにキューが空の場合は、-1を印刷します.
 
サンプル入力:
3

PUSH 10

POP

POP

サンプル出力:
この問題は、私自身のパソコンでは可能ですが、九度ではACがなくアルゴリズムの考えしか言わないでしょう.テーマは2つのスタックでキュー、temp 1、temp 2の2つのスタックを実現することを要求しています.その中でpushの時
元素をtemp 1に圧縮し、popのとき.まずtemp 1の要素を上から下に、順番にポップアップし、temp 2の中に全部押し込んだ後、temp 2の上に1つポップアップします.他のやり方をさっきのやり方でtemp 1に戻します.
 
#include<iostream>

#include <string>

#include <stack>

using namespace std;



int IntToInt(int a)

{

	if(a==0)

		return 1;

	int last=1;



	for(int i=1;i<=a;i++)

		last=last*10;

	return last;

}



int StringToInt(string& str)

{

	int len=str.size();

	int a=0;

	int j=0;

	for(int i=len-1;i>=5;i--)

	{

		a=a+(str[i]-48)*IntToInt(j);

		j++;

	}

	return a;

}



int main()

{

	stack<int> temp1,temp2;



	int n;

	cin>>n;

	int N=n;

	while(N--)

	{

		string str;

		int len=0;

		cin.sync();

		getline(cin,str);

		len=str.size();

		if(len<4)//pop

		{

			if(temp1.empty())

				cout<<-1<<endl;

			else

			{

				while(!temp1.empty())

				{

					temp2.push(temp1.top());

					temp1.pop();

				}

				cout<<temp2.top()<<endl;

				while(!temp2.empty())

				{

					temp1.push(temp2.top());

					temp2.pop();

				}

			}

		}

		else

			temp1.push(StringToInt(str));

	}



}