01数字串
提交数: 156, 通过率: 62.82%, 平均分: 65.9
题目描述:
有一串只包含“0” 、 “1” 的数字串 s(长度不超过 1000) , 现要从数字串 s 中截取一段数字子串(该子串一定存在), 使得数字子串中“0” 、 “1” 的数量相等。
编写程序, 求数字串 s 中满足上述要求的最长数字子串的长度及其在数字串 s 中的位置(若有多个相同的最长长度, 取第一次出现的位置)。
输入格式:
一个01串
输出格式:
输出两行,第一行最多的长度,第二行 数字串 s 中的位置
样例输入:
01100
样例输出:
4 0 3
提示:
请完善程序:
#include<bits/stdc++.h>
using namespace std;
char a[1001], c ;
int n, p, maxn, b[1001];
int main(){
ios::sync_with_stdio( 0 ), cin.tie( 0), cout.tie(0); //读入优化
while ( cin >> c ){
n = n+1;
a[n] = c;
}
for ( int i=1; i<=n; i++) //求前缀和 b[]
______________________________
for ( int i=1; i<n; i++){ //枚举起点
for ( int j=i+1; j<=n; j++){ //枚举终点
int x = ______________, y = _____________________; //分别求该区间内0的个数,及1的个数。
if ( x == y ) { //如果这区间内0的个数和与1的个数相等,并且长度更长,那么更新最优值
___________________
}
}
}
cout << maxn << endl;
cout << p-1 << " " << p+maxn - 1 -1 ;
return 0;
}
时间限制: 1000ms
空间限制: 256MB