
 
分析:
n一但是奇数就一定不行,因为无论有多少-1和1都会导致最后的和是-1或1,每次断开一个区间会改变2,所以一定不行,直接输出-1。 其次,如果数组满足题意也可以一个一个输出每一个下标,遍历数组,每两个一组,如果两个数相同,说明对最后的和没有影响,直接放在一起,如果不相等就要分开输出。
代码:
#include <bits/stdc++.h>
#define x first
#define y second
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N=2e5+10;
int a[N];
int main()
{
	ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
	
	int t;
	cin>>t;
	while(t--)
	{
		int n;
		cin>>n;
		for(int i=1;i<=n;i++) cin>>a[i];
		if(n%2)
		{
			cout<<-1<<'\n';
			continue;
		}
		vector<pii> ans;
		for(int i=1;i<=n;i+=2)
		{
			if(a[i]==a[i+1]) ans.push_back({i,i+1});
			else
			{
				ans.push_back({i,i});
				ans.push_back({i+1,i+1});
			}
		}
		cout<<ans.size()<<'\n';
		for(int i=0;i<ans.size();i++) cout<<ans[i].x<<' '<<ans[i].y<<'\n';
	}
}


















