タイトル
ウェブナビゲーション
時間制限: 1000ミリ秒 | メモリ制限: 10000K | |
合計提出: 33497 | 受け入れ: 14937 |
説明
標準のWebブラウザは、最近アクセスしたページ間を前後に移動する機能が含まれています。これらの機能を実装するための一つの方法は、前後に移動することで到達できるページを追跡するために2つのスタックを使用することです。この問題では、これを実装するように求められます。
以下のコマンドがサポートされる必要がある:
BACK:前方スタックの一番上に現在のページを押してください。その新しい現在のページ作り、後方スタックの最上位からページをポップ。後方スタックが空の場合、コマンドは無視されます。
FORWARD:後方スタックの一番上に現在のページを押してください。その新しい現在のページ作り、前方スタックの最上位からページをポップ。前方スタックが空の場合、コマンドは無視されます。
VISIT:後方スタックの一番上に現在のページを押して、URLが新しい現在のページを指定します。前方スタックが空になります。
QUIT:ブラウザを終了します。
ブラウザが最初にURL http://www.acm.org/でWebページをロードすると仮定
以下のコマンドがサポートされる必要がある:
BACK:前方スタックの一番上に現在のページを押してください。その新しい現在のページ作り、後方スタックの最上位からページをポップ。後方スタックが空の場合、コマンドは無視されます。
FORWARD:後方スタックの一番上に現在のページを押してください。その新しい現在のページ作り、前方スタックの最上位からページをポップ。前方スタックが空の場合、コマンドは無視されます。
VISIT:後方スタックの一番上に現在のページを押して、URLが新しい現在のページを指定します。前方スタックが空になります。
QUIT:ブラウザを終了します。
ブラウザが最初にURL http://www.acm.org/でWebページをロードすると仮定
入力
入力は、一連のコマンドです。コマンドのキーワードBACK、FORWARD、VISIT、およびQUITは大文字ですべてです。URLは何の空白を持たず、ほとんどの70文字で持っています。あなたは何の問題インスタンスが任意の時点で、各スタック内の100個の以上の要素を必要としないことを仮定してもよいです。入力の終了はQUITコマンドで示されています。
出力
QUIT以外の各コマンドについては、コマンドは無視されていない場合は、コマンドが実行された後、現在のページのURLを印刷します。それ以外の場合は、印刷は「無視します」。各コマンドの出力は、独自の行に印刷されなければなりません。何も出力はQUITコマンドで生成されません。
サンプル入力
VISIT http://acm.ashland.edu/ VISIT http://acm.baylor.edu/acmicpc/ バック バック バック FORWARD VISIT http://www.ibm.com/ バック バック FORWARD FORWARD FORWARD 終了する
サンプル出力
http://acm.ashland.edu/ http://acm.baylor.edu/acmicpc/ http://acm.ashland.edu/ http://www.acm.org/ 無視されました http://acm.ashland.edu/ http://www.ibm.com/ http://acm.ashland.edu/ http://www.acm.org/ http://acm.ashland.edu/ http://www.ibm.com/ 無視されました
問題の意味の分析
フォワードブラウザとアナログのバックオフの左上隅も同様です。
コード
ソースコード
問題: 1028 | ユーザー: PaladinDu | |
メモリ: 176K | 時間: 32MS | |
言語: C ++ | 結果: 受け入れ |
- ソースコード
#include<stdio.h> #include<string.h> int main(){ char buf[105][80],action[10],top,temp; strcpy(buf[1],"http://www.acm.org/"); scanf("%s",action); top=temp=1; while(strcmp(action,"QUIT")!=0) { if(strcmp(action,"VISIT")==0) { top=temp; top++; temp=top; scanf("%s",buf[top]); printf("%s\n",buf[top]); }else if(strcmp(action,"BACK")==0) { if(temp-1>0)printf("%s\n",buf[--temp]); else printf("Ignored\n"); }else if(strcmp(action,"FORWARD")==0) { if(temp+1<=top)printf("%s\n",buf[++temp]); else printf("Ignored\n"); } scanf("%s",action); } return 0; }