www 被大佬们吊打|

wscqwq

园龄:2年粉丝:2关注:3

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;
}

本文作者:wscqwq

本文链接:https://www.cnblogs.com/wscqwq/p/17436278.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   wscqwq  阅读(3)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起