1.规定:01可变为1,10可变为0;
二进制数1001,要使子串变换长度后为1,求子串个数
只要结尾两数不同,则+i+1;
结尾两数不同,则+1;
#include<stdio.h>
char a[200005];
int main()
{
long long int t,n;
scanf("%lld",&t);
while(t--)
{
scanf("%lld",&n);
scanf("%s",a);
long long int ans=0;
for(long long i=1;i<n;i++)
{
if(a[i]==a[i-1]) ans++;
else ans+=(i+1);
}
printf("%lld\n",ans+1);
}
return 0;
}
2.当前k个数相×==后面n-k个数相×时, 且该数组仅1,2;
则说明当前面的2与后面的2个数相同时,为解
#include<stdio.h>
int main()
{
int t,n,k,ans=0;
int a[1010];
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
int sum=0,i;
for(i=1; i<=n; i++)
{
scanf("%d",&a[i]);
if(a[i]==2)sum++;
}
if(sum%2!=0) printf("-1\n");
else
{
int num=0,flag=0;
for(i=1; i<=n; i++)
{
if(a[i]==2)
{
num++;
}
if(num==sum-num)
{
printf("%d\n",i);
flag=1;
break;
}
}
if(!flag)
{
printf("-1\n");
}
}
}
}