1. 程式人生 > >Contest1030 - 2017級新生周賽(三)D

Contest1030 - 2017級新生周賽(三)D

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);
			}
		}
	}
}