#include<bits/stdc++.h>
using namespace std;
#pragma GCC optimize(2)
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
const int N=5e4+10;
int t,n;
int a[N];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin>>t;
while(t--){
cin>>n;
for(int i=1;i<=n;++i) cin>>a[i];
if(a[1]+a[2]<=a[n]){
cout<<"1 2 "<<n<<"\n";
}else{
cout<<"-1\n";
}
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
#pragma GCC optimize(2)
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
int t;
char s[110];
const int N=110;
int a[N];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin>>t;
while(t--){
cin>>s;
int now=0;
int len=strlen(s);
memset(a,0,sizeof(int)*(len+1));
s[len]='9';
s[len+1]=0;
len++;
int tlen=1;
for(int i=1;i<len;++i){
if(s[i]==s[i-1]){
tlen++;
}else{
if(s[i-1]=='1')a[now++]=tlen;
tlen=1;
}
}
sort(a,a+now);
int ans=0;
for(int i=now-1;i>=0;i-=2){
ans+=a[i];
}
cout<<ans<<"\n";
}
return 0;
}
那么只要发现了这个公式就很好做
s
u
m
[
i
]
−
s
u
m
[
j
−
1
]
=
i
−
j
+
1
⇒
s
u
m
[
i
]
−
i
=
s
u
m
[
j
−
1
]
−
(
j
−
1
)
sum[i]-sum[j-1]=i-j+1 \\ \Rightarrow sum[i]-i=sum[j-1]-(j-1)
sum[i]−sum[j−1]=i−j+1⇒sum[i]−i=sum[j−1]−(j−1)
没开ll wa两发,淦
#include<bits/stdc++.h>
using namespace std;
#pragma GCC optimize(2)
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
const int N=1e5+10;
ll t,n;
string s;
ll a[N];
ll sum[N];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin>>t;
while(t--){
cin>>n;
cin>>s;
sum[0]=0;
map<ll,ll>rec;
set<ll>q;
//memset(rec,0,sizeof(rec));
for(ll i=0;i<n;++i){
a[i+1ll]=s[i]-'0';
sum[i+1ll]=sum[i]+a[i+1];
rec[sum[i+1ll]-(i+1ll)]++;
q.insert(sum[i+1ll]-(i+1ll));
}
rec[0]++;
ll ans=0;
// for(int i=0;i<=900000;++i){
// if(rec[i]>1){
// int p=rec[i];
// ans+=((p)*(p-1))/2;
// }
// }
for(auto i:q){
if(rec[i]>1ll){
int p=rec[i];
ans+=((p)*(p-1ll))/2ll;
}
}
cout<<ans<<"\n";
}
return 0;
}