求助Div2 C2
  • 板块学术版
  • 楼主WillW_Chen
  • 当前回复4
  • 已保存回复4
  • 发布时间2023/7/30 01:33
  • 上次更新2023/11/3 06:58:38
查看原帖
求助Div2 C2
389955
WillW_Chen楼主2023/7/30 01:33

莫名其妙TLE呜呜

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<iomanip>
#include<algorithm>
#include<cmath>
#include<vector>
#include<bitset>
#include<list>
#include<set>
#include<queue>
#include<map>
#include<stack>
#include<ctime>
#include<random>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define endl '\n'
const ll MAXN=1e6+2;
const ll inf=0x3f3f3f3f;
ll n;
int a[MAXN];
void solve(){
    cin>>n;
    int pos=0;
    int neg=0;
    int minn=30;
    int maxn=-30;
    int ind0=0;
    int ind1=0;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        if(a[i]>=0){
            if(a[i]>=maxn){
                maxn=a[i];
                ind1=i;
            }
            pos++;
        }
        else{
            if(a[i]<=minn){
                minn=a[i];
                ind0=i;
            }
            neg++;
        }
    }
    if(!pos){
        cout<<n-1<<endl;
        for(int i=n;i>=2;i--){
            cout<<i-1<<' '<<i<<endl;
        }
        return;
    }
    if(!neg){
        cout<<n-1<<endl;
        for(int i=2;i<=n;i++){
            cout<<i<<' '<<i-1<<endl;
        }
        return;
    }
    bool f=0;
    if(maxn>=-minn){
        f=1;
    }
    int num1=0;
    int num0=0;
    int k1=0;
    int k0=0;
    if(f){
        num1=neg;
        num0=pos;
        while(-minn<maxn){
            minn*=2;
            num0++;
            k0++;
        }
    }
    else{
        num0=pos;
        num1=neg;
        while(maxn<-minn){
            maxn*=2;
            num1++;
            k1++;
        }
    }
    cout<<31<<endl;
    if(num0>=num1){
        int tmp=0;
        if(!f){
            for(int i=1;i<=k1;i++){
                cout<<ind1<<' '<<ind1<<endl;
                tmp++;
            }
        }
        for(int i=1;i<=n;i++){
            if(a[i]<0){
                cout<<i<<' '<<ind1<<endl;
                tmp++;
            }
        }
        for(int i=2;i<=n;i++){
            cout<<i<<' '<<i-1<<endl;
            tmp++;
        }
        for(int i=1;i<=31-tmp;i++){
            cout<<n<<' '<<n<<endl;
        }
    }
    else{
        int tmp=0;
        if(!f){
            for(int i=1;i<=k0;i++){
                cout<<ind0<<' '<<ind0<<endl;
                tmp++;
            }
        }

        for(int i=1;i<=n;i++){
            if(a[i]>=0){
                cout<<i<<' '<<ind0<<endl;
                tmp++;
            }
        }
        for(int i=n;i>=2;i--){
            cout<<i-1<<' '<<i<<endl;
            tmp++;
        }
        for(int i=1;i<=31-tmp;i++){
            cout<<1<<' '<<1<<endl;
        }
    }
    return;
}
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int T;
    cin>>T;
    while(T--){
        solve();
    }
    return 0;
}
2023/7/30 01:33
加载中...