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