P8253 40ptsTLE#3~5 8~10 13~15 18~20
  • 板块灌水区
  • 楼主I_AK_noip2024
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/10/11 22:45
  • 上次更新2023/11/2 14:22:42
查看原帖
P8253 40ptsTLE#3~5 8~10 13~15 18~20
1061587
I_AK_noip2024楼主2023/10/11 22:45

T_AK_CSP_2023 发表于 2023-10-11 22:43 o(n^2*m)加指令集能过吗

#include<bits/stdc++.h>
using namespace std;
int n,m,a[5][100001];
long long ans;
inline int read() {
	char c=getchar();
	int x=0;
	while(c<'0'){
		c=getchar();
	}
	while(c>='0'){
		x=(x<<3)+(x<<1)+c-'0';
		c=getchar();
	}
	return x;
}
int main(){
    cin>>m>>n;
    if(m==2){
        for(int j=1;j<=n;++j){
            cin>>a[1][j];
            ans+=a[1][j];
        }
        for(int j=1;j<=n;++j){
            cin>>a[2][j];
            ans+=a[2][j];
        }
        ans*=2ll*n;
        cout<<ans;
    }
    else if(m==3){
        for(int j=1;j<=n;++j){
            a[1][j]=read();
        }
        for(int j=1;j<=n;++j){
            a[2][j]=read();
        }
        for(int j=1;j<=n;++j){
            a[3][j]=read();
        }
        for(register int i=1;i<=n;++i){
            for(register int j=i+1;j<=n;++j){
                int maxx=a[1][i]+a[1][j],minn=maxx;
                if(a[2][i]+a[2][j]>maxx){
                    maxx=a[2][i]+a[2][j];
                }
                if(a[3][i]+a[3][j]>maxx){
                    maxx=a[3][i]+a[3][j];
                }
                if(a[2][i]+a[2][j]<minn){
                    minn=a[2][i]+a[2][j];
                }
                if(a[3][i]+a[3][j]<minn){
                    minn=a[3][i]+a[3][j];
                }
                ans+=maxx<<1;
                ans+=minn<<1;
            }
        }
        for(register int i=1;i<=n;++i){
            int maxx=a[1][i]<<1,minn=maxx;
            if(a[2][i]+a[2][i]>maxx){
                maxx=a[2][i]+a[2][i];
            }
            if(a[3][i]+a[3][i]>maxx){
                maxx=a[3][i]+a[3][i];
            }
            if(a[2][i]+a[2][i]<minn){
                minn=a[2][i]+a[2][i];
            }
            if(a[3][i]+a[3][i]<minn){
                minn=a[3][i]+a[3][i];
            }
        }
        cout<<ans;
    }
    else{
        for(int i=1;i<=m;++i){
            for(int j=1;j<=n;++j){
                a[i][j]=read();
            }
        }
        for(register int i=1;i<=n;++i){
            for(register int j=i+1;j<=n;++j){
                int maxx=a[1][i]+a[1][j],minn=maxx;
                if(a[2][i]+a[2][j]>maxx){
                    maxx=a[2][i]+a[2][j];
                }
                if(a[3][i]+a[3][j]>maxx){
                    maxx=a[3][i]+a[3][j];
                }
                if(a[4][i]+a[4][j]>maxx){
                    maxx=a[4][i]+a[4][j];
                }
                if(a[2][i]+a[2][j]<minn){
                    minn=a[2][i]+a[2][j];
                }
                if(a[3][i]+a[3][j]<minn){
                    minn=a[3][i]+a[3][j];
                }
                if(a[4][i]+a[4][j]<minn){
                    minn=a[4][i]+a[4][j];
                }
                ans+=maxx<<1;
                ans+=minn<<1;
            }
        }
        for(register int i=1;i<=n;++i){
            int maxx=a[1][i]+a[1][i],minn=maxx;
            if(a[2][i]+a[2][i]>maxx){
                maxx=a[2][i]+a[2][i];
            }
            if(a[3][i]+a[3][i]>maxx){
                maxx=a[3][i]+a[3][i];
            }
            if(a[4][i]+a[4][i]>maxx){
                maxx=a[4][i]+a[4][i];
            }
            if(a[2][i]+a[2][i]<minn){
                minn=a[2][i]+a[2][i];
            }
            if(a[3][i]+a[3][i]<minn){
                minn=a[3][i]+a[3][i];
            }
            if(a[4][i]+a[4][i]<minn){
                minn=a[4][i]+a[4][i];
            }
            ans+=maxx;
            ans+=minn;
        }
        cout<<ans;
    }
}
2023/10/11 22:45
加载中...