CF1754C1
题目
首先,如果有奇数个数,那么正负 \(1\) 肯定不能完全抵消,无解。
如果有偶数个数,必定有解,构造方案:
- 对于每两个位置,如果相同,将这两个数划分为 \(1\) 组。
- 否则,将两个数各划分为 \(1\) 组。
这样,对于第一种,这个区间是 \(0\),对于第二种,这两个区间的和是 \(0\),显然符合题意。
#include <cstdio>
#include <vector>
using namespace std;
#define Ls(i,l,r) for(int i=l;i<r;++i)
#define Rs(i,l,r) for(int i=l;i>r;--i)
#define L(i,l) for(int i=1;i<=l;++i)
const int N=200010;
int T,n,a[N];
int main(){
// freopen("1.in","r",stdin);
// freopen("1.out","w",stdout);
// ios::sync_with_stdio(0);
// cin.tie(0);
// cout.tie(0);
scanf("%d",&T);
while(T--){
vector<pair<int, int>>ans;
scanf("%d",&n);
L(i, n)scanf("%d",a+i);
if(n&1)puts("-1");
else{
for(int i=1;i<=n;i+=2)
if(a[i]==a[i+1])ans.emplace_back(i,i+1);
else ans.emplace_back(i,i),ans.emplace_back(i+1,i+1);
printf("%d\n",ans.size());
for(auto v:ans)printf("%d %d\n",v.first,v.second);
}
}
return 0;
}