考え
水が問題である、あなたは、キュー内の完成の要素を取得しないように注意して、書き込み+キューにシミュレーションを使用することができます!
コード
1の#include <iostreamの> 2の#include <cstdioを> 3の#include <キュー> 4 使って 名前空間STDを、 5 のconst int型 MAXN = 1000000 + 5 。 6 のint main()の 7 { 8 INT N。 9 CIN >> N。 10 キュー< int型 >。// 队列 11 キュー< int型 > B; 12 INT X、Y。 13 CIN >> X。 14 のための(int型 i = 0 ; iはXを<; iは++ ) 15 { 16 INT Xと、 17 cinを>> X; 18 a.push(X)。 19 } 20 CIN >> Y。 21 のために(int型 I = 0 ; iがyと<; Iは++ ) 22 { 23 のint Y。 24 CIN >> Y。 25 b.push(Y)。 26 } 27 int型の和= 0。//工程数記録 28 BOOLフラグ=で0 ; //はゲームおよびエンド勝ち負けか否かを判定する 29を 一方(SUM <= MAXN) 30 { 31は、 INT U = a.front(); a.pop(); 32 int型 V = b.front (); b.pop(); 33である SUM ++ ; 34は、 IF(U> V) 35 { 36 a.push(V); // VよりU-大きく 37 [ a.push(U); 38である } 39 他 40 { 41 b.push(U); // U-V比H 42である b.push(V); 43である } 44は、 IF(a.size()== 0 && b.size()== 0)// OVER GAME 45 BREAK 。 46で IF(a.size()== 0 ) 47 { 48 のprintf(" %D%D \ N- "、SUM、2 ); 49 フラグに= 1 ; 50 } 51れる IF(b.size()== 0 ) 52 { 53 のprintf(" %D%D \ n "、和、1 )。 54 フラグ= 1 。 55 } 56 であれば(フラグ== 1)ブレーク。 57 } 58 であれば(フラグ== 0)のprintf(" -1の\ n " ); 59 リターン 0 ; 60 }
それは単純ではないですか?