题意:
题意:题意:给一个只包含1和-1的数组,区间[L , R]的价值为a[l] - a[l+1] + a[l+2] ……+(-)a[r]
求一个划分,使得每个区间的价值之和为0 , 不需要最小化划分数
思路: 当数组长度为奇数时,无论怎样都不能得到满足题意的划分
对划分方案进行特殊化:只考虑两个数两个数地划分
对于偶数长度的数组,每两个数为一组依次从左向右枚举,如果两个数相等,则两个数划分到一个区间,如果不相等则自成区间即可
Code:
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int mxn=2e5+10;
vector<pair<int,int> > v;
int n;
int a[mxn];
void solve(){
v.clear();
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
if(n%2==1){
cout<<-1<<'\n';
return;
}
for(int i=2;i<=n;i+=2){
if(a[i]==a[i-1]) v.push_back({i-1,i});
else v.push_back({i-1,i-1}),v.push_back({i,i});
}
cout<<v.size()<<'\n';
for(int i=0;i<v.size();i++) cout<<v[i].first<<" "<<v[i].second<<'\n';
}
signed main(){
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int T;
cin>>T;
while(T--)solve();
return 0;
}