Let's call a binary string TT of length mm indexed from 11 to mm paranoid if we can obtain a string of length 11 by performing the following two kinds of operations m-1m−1 times in any order :
Select any substring of TT that is equal to 01, and then replace it with 1.
Select any substring of TT that is equal to 10, and then replace it with 0.
For example, if T =T= 001, we can select the substring [T_2T_3][T2T3] and perform the first operation. So we obtain T =T= 01.
You are given a binary string SS of length nn indexed from 11 to nn. Find the number of pairs of integers (l, r)(l,r) 1 \le l \le r \le n1≤l≤r≤n such that S[l \ldots r]S[l…r] (the substring of SS from ll to rr) is a paranoid string.
Input
The first line contains an integer tt (1 \le t \le 10001≤t≤1000) — the number of test cases. The description of test cases follows.
The first line of each test case contains a single integer nn (1 \le n \le 2 \cdot 10^51≤n≤2⋅105) — the size of SS.
The second line of each test case contains a binary string SS of nn characters S_1S_2 \ldots S_nS1S2…Sn. (S_i =Si= 0 or S_i =Si= 1 for each 1 \le i \le n1≤i≤n)
It is guaranteed that the sum of nn over all test cases doesn't exceed 2 \cdot 10^52⋅105.
Output
For each test case, output the number of pairs of integers (l, r)(l,r) 1 \le l \le r \le n1≤l≤r≤n such that S[l \ldots r]S[l…r] (the substring of SS from ll to rr) is a paranoid string.
Sample 1
Inputcopy | Outputcopy |
5 1 1 2 01 3 100 4 1001 5 11111 | 1 3 4 8 5 |
Note
In the first sample, SS already has length 11 and doesn't need any operations.
In the second sample, all substrings of SS are paranoid. For the entire string, it's enough to perform the first operation.
In the third sample, all substrings of SS are paranoid except [S_2S_3][S2S3], because we can't perform any operations on it, and [S_1S_2S_3][S1S2S3] (the entire string).
这个题目的意思是给你一个字符串就是1001010什么什么的,然后你可以吧01变成1,10变成0,就是保留右边,所以我们要从右边开始找,就OK了
#include <stdio.h>
#include <string.h>
int main()
{
int i,a,len;
int n;
char arr[1000000];
scanf("%d",&n);
while(n--)
{
long long sum=0;
scanf("%d",&a);
scanf("%s",arr);
len=strlen(arr);
for(i=len-1;i>=0;i--)
{
if(i==0) sum++;
else
{
if(arr[i]=arr[i-1]) sum++;
else sum=sum+i+1;
}
}
printf("%lld\n",sum);
}
}
复习高数!!!