Array Product (CodeForces - 1042C )

思路:这个题需要先找到那个绝对值最小的负数,如果负数为奇数个,就和0一起去掉;如果负数为偶数个就把零去掉就行,正数有条件的话就乘上。
需要注意一点:千万不要用cin和cout,会超时的,当时一直在超时,改掉cin就过了。
代码有的地方重复,有时间再改:

#include<bits/stdc++.h>
using namespace std;
    int l[220000],z[220000],f[220000];
    int a[220000];
int main()
{
    int n,ling=0,zheng=0,fu=0,mmh=0,tmpd,tmph,wei;
    int mmd=-2000000000;
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%d",&a[i]);
         if(a[i]<0) {
                fu++;f[fu]=i;
                if(mmd<a[i]){
                mmd=a[i];
                mmh=i;
                wei=fu;
                }
        }
        else if(a[i]>0){zheng++;z[zheng]=i;}
        else {ling++;l[ling]=i;}
    }
    if(fu>0){
    tmph=f[fu];
    f[fu]=mmh;
    f[wei]=tmph;}
    if(ling==0)
    {
        if(fu%2==0){
            for(int i=1;i<n;i++){
                cout<<1<<" "<<i<<" "<<i+1<<endl;
            }
        }
        if(fu%2!=0){
            cout<<2<<" "<<f[fu]<<endl;
            for(int i=1;i<fu-1;i++){
                cout<<1<<" "<<f[i]<<" "<<f[i+1]<<endl;
            }
            if(zheng==1&&fu>1){cout<<1<<" "<<f[fu-1]<<" "<<z[1]<<endl;}
            if(zheng>1){
                if(fu>1){
                    cout<<1<<" "<<f[fu-1]<<" "<<z[1]<<endl;
                    for(int i=1;i<zheng;i++){
                cout<<1<<" "<<z[i]<<" "<<z[i+1]<<endl;
                                }
                      }
                    else{
                        cout<<1<<" "<<z[1]<<" "<<z[2]<<endl;
                             for(int i=2;i<zheng;i++){
                cout<<1<<" "<<z[i]<<" "<<z[i+1]<<endl;
                                  }
                    }
            }
        }
    }
     else if(ling>=1)
    {
        for(int i=1;i<ling;i++){
            cout<<1<<" "<<l[i]<<" "<<l[i+1]<<endl;
        }
        if(fu%2==0){
                if(zheng!=0||fu!=0){
            cout<<2<<" "<<l[ling]<<endl;}
            if(fu>0){
                for(int i=1;i<fu;i++){
                cout<<1<<" "<<f[i]<<" "<<f[i+1]<<endl;
            }
            if(zheng>0){
                cout<<1<<" "<<f[fu]<<" "<<z[1]<<endl;
                for(int i=1;i<zheng;i++){
                cout<<1<<" "<<z[i]<<" "<<z[i+1]<<endl;
            }
            }
            }
            if(fu==0){
                for(int i=1;i<zheng;i++){
                cout<<1<<" "<<z[i]<<" "<<z[i+1]<<endl;
            }
            }
        }
        if(fu%2!=0){
            cout<<1<<" "<<l[ling]<<" "<<f[fu]<<endl;
            if(fu>1||zheng>0){
            cout<<2<<" "<<f[fu]<<endl;}
            for(int i=1;i<fu-1;i++){
                cout<<1<<" "<<f[i]<<" "<<f[i+1]<<endl;
            }
            if(zheng==1&&fu>1){cout<<1<<" "<<f[fu-1]<<" "<<z[1]<<endl;}
            if(zheng>1){
                if(fu>1){
                    cout<<1<<" "<<f[fu-1]<<" "<<z[1]<<endl;
                          for(int i=1;i<zheng;i++){
                              cout<<1<<" "<<z[i]<<" "<<z[i+1]<<endl;
                             }
                    }
                    else{
                        cout<<1<<" "<<z[1]<<" "<<z[2]<<endl;
                        for(int i=2;i<zheng;i++){
                             cout<<1<<" "<<z[i]<<" "<<z[i+1]<<endl;
                                  }
                    }
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_41336270/article/details/84035574
今日推荐