题意:给你一个序列,其中的元素为大小范围0-9,让你求区间之和等于区间长度的情况个数。
思路:假设区间i~j满足条件,则有qz[i]-qz[j-1]=i-j+1,可以转换为qz[i]-i=qz[j-1]-(j-1)。对于每一个下标i,它前面有多少个下标j满足qz[i]-i=qz[j]-j。还要去加上每个下标的前缀和本来就等于区间长度的情况。
var readline=require('readline');
var rl=readline.createInterface({
input:process.stdin,
output:process.stdout
});
var arr=[];
rl.on('line',function(inp){
arr.push(inp);
var len=arr.length;
if(len%2===1&&len>1){
var n=parseInt(arr[arr.length-2]),
a=arr[arr.length-1].split(''),
sum=0,ans=0,obj={};
for(var i=0;i<n;i++){
a[i]=parseInt(a[i]);
sum+=a[i];
var t=sum-i-1;
if(sum===i+1) ans++;
if(!(t in obj)) obj[t]=1;
else{
ans+=obj[t];
obj[t]++;
}
}
console.log(ans);
}
if(len===parseInt(arr[0])*2+1) process.exit(0);
});