题目:给你一个01串。再给你两个数字,问这两个数字组成的区间的01串是否都是0或者1。
分析:简单题。
方法1:每次相邻字符不同即发生一次变化,统计变化次数比较即可。
方法2:统计每个从0开始的区间中1的个数,然后计算区间中的1即可。
注意:不用太纠结于格式。
方法1:
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <string>
using namespace std;
string data;
int tt,sums[1000010];
int main()
{
int n,i,j,Min,Max,T = 1;
while ( cin >> data ) {
int L = data.length();
sums[0] = 0;
for ( i = 1 ; i < L ; ++ i ) {
sums[i] = sums[i-1];
if ( data[i] != data[i-1] )
sums[i] ++;
}
printf("Case %d:\n",T ++);
cin >> n;
while ( n -- ) {
cin >> i >> j;
if ( sums[i] == sums[j] )
printf("Yes\n");
else printf("No\n");
}
}
return 0;
}
方法2:
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <string>
using namespace std;
string data;
int tt,sums[1000010];
int main()
{
int n,i,j,Min,Max,T = 1;
while ( cin >> data ) {
int L = data.length();
sums[-1] = 0;
for ( i = 0 ; i < L ; ++ i )
sums[i] = sums[i-1] + data[i]-'0';
printf("Case %d:\n",T ++);
cin >> n;
while ( n -- ) {
cin >> i >> j;
Min = min( i, j );
Max = max( i, j );
if ( sums[Max]-sums[Min-1] == 0 || sums[Max]-sums[Min-1] == Max-Min+1 )
printf("Yes\n");
else printf("No\n");
}
}
return 0;
}