题目:https://ac.nowcoder.com/acm/contest/25625/E
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=1e6+5;
const int mod=1e9+7;
int t,n,cnt;
char a[maxn];
vector<int> v;
int sum[maxn];
signed main()
{
cin>>t;
while(t--)
{
memset(sum,0,sizeof(sum));
v.clear();
cin>>n;
cin>>a+1;
cnt=0;
for(int i=1;i<=n;i++)
{
sum[i]=sum[i-1];
if(a[i]=='1')
{
cnt++;
sum[i]=sum[i]+i;
v.push_back(i);
}
}
if(cnt==1){
cout<<0<<"\n";
continue;
}
cnt-=1;
int f=0;
int ans=0;
sum[0]%=mod;
sum[1]%=mod;
for(int i=0;i<v.size();i++)
{
ans+=v[i]*v[i]*cnt;
ans-=sum[v[i]-1]*v[i]*2;
ans%=mod;
sum[i]%=mod;
}
cout<<(ans+mod)%mod<<endl;
}
return 0;
}
没想通为什么能这么求解,要是有大佬看到,麻烦给我解答一下,谢谢啦