Contest1030 - 2017級新生周賽(三)D
阿新 • • 發佈:2018-11-11
1323 Problem D
題目描述
“與我簽訂契約,成為魔法少女吧!”。QB這個無恥老賊又在世界各地搞傳銷了。
某一天我們的圓神終於決定要把QB封印起來了,可是普通的魔法對QB來說是沒有用的。於是圓神來到學院都市,找到了呱太醫生,呱太醫生通過研究,發現QB的構造與人工智慧驚人的相似。於是創造出了封印QB的方法。
具體方法是這樣的:首先你需要把QB抓過來(笑)。然後通過計算機向QB輸入一串由01構成的機器程式碼,重構QB腦中的意識。可是有一個很嚴重的問題,就是在輸入的程式碼中,有一個關鍵位置十分容易被QB現存的意識破壞掉,所以呱太醫生必須找到這個位置讓圓神為其新增一層護盾,現在呱太醫生將這個任務交給了你,你能幫呱太醫生找出這個關鍵位置,拯救世界嗎?
那麼什麼位置算是關鍵位置呢?,呱太醫生告訴說,如果我們吧01串從某個位置分開成兩個串,我們把前面的串叫串1,後面的那個叫串2。如果串1中0的個數,等於串2中1的個數。那麼這個位置就是關鍵位置。
注意:因為關鍵位置沒有下標,這裡我們用串1最後一個數字的下標來代替表示關鍵位置(原始01機器程式碼的下標從1開始),如果覺得我沒講明白的話就看樣例和下面的Hint
輸入
第一行, 一個n,01串的長度
資料範圍:(2 <= n <= 1000000)
第二行,一個01串s
輸出
一個數,第一個串最後一個數字的下標
樣例輸入
9 000010111
樣例輸出
4
提示
樣例:這個串可以從關鍵位置分割成兩個串,串1:0000, 串2:10111,為了方便表示關鍵位置,我們用第一個串的最後一個數字的下標代替關鍵位置輸出。所以輸出串1中最後一個0的位置,也就是4。
特殊的:如果一個串中沒有出現過1(比如串:0000),請輸出0.
import java.util.Scanner; public class Chuan { public static void main(String[] args) { Scanner sc = new Scanner(System.in); Scanner sc2 = new Scanner(System.in); int n = sc.nextInt(); String s = sc2.nextLine(); int a[] = new int[n]; int b[] = new int[n]; if(s.charAt(0)=='0') a[0] = 1; else b[0] = 1; for (int i = 1; i < n; i++) { if(s.charAt(i)=='0') { a[i] = a[i-1] + 1; b[i] = a[i-1]; }else { a[i] = a[i-1]; b[i] = b[i-1] + 1; } } for (int i = 0; i < b.length; i++) { if(a[i]==b[n-1]-b[i]) { System.out.println(i+1); } } } }