求助,请问一下为什么这个会超时呢,暴力+优化了
查看原帖
求助,请问一下为什么这个会超时呢,暴力+优化了
672837
DaShabby楼主2023/7/20 11:04
#include<bits/stdc++.h>
#define x first
#define y second 
#define inf 0x3f3f3f3f
#define lowbit(x) x&(-x)
#define lson node<<1
#define rson node<<1|1
#define now_node int l,int r,int node
#define l_node l,mid,lson
#define r_node mid+1,r,rson
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pii;
const int maxn=5e5+23;
int tot,cnt,idx;

int a[maxn],b[maxn];
void work(){
	int n;
	scanf("%d",&n);
	for(int i=1;i<=n;i++)scanf("%d",&a[i]);
	if(!a[n]){
		printf("0\n");return;
	}
	int zero=0;
	while(1){
		idx=0;
		if(n==1){
			printf("%d\n",a[1]);return;
		}
		for(int i=n;i>1;i--)a[i]=a[i]-a[i-1];
		if(zero){
			zero--;
			sort(a+1,a+n+1);
			for(int i=1;i<=n;i++){
				if(a[i])b[++idx]=a[i];
				else zero++;
			}
		}
		else{
			for(int i=1;i<n;i++)a[i]=a[i+1];
			sort(a+1,a+n);
			for(int i=1;i<n;i++){
				if(a[i])b[++idx]=a[i];
				else zero++;
			}
		}
		for(int i=1;i<=idx;i++)a[i]=b[i];
		n=idx;
	}
} 
//void work(){
//	int n,m,k;
//	int iq;
//	scanf("%d",&n);
//	for(int i=1;i<=n;i++)scanf("%d",&a[i]);
//	min_iq[n]=1;
//	for(int i=n-1;i>=1;i--){
//		if(a[i]>min_iq[i+1])min_iq[i]=min_iq[i+1]+1;
//		else min_iq[i]=min_iq[i+1];
//	}
//	for(int i=1;i<=n;i++){
//		if(iq>=a[i])printf("1");
//		else if(iq>=min_iq[i])printf("1"),iq--;
//		else printf("0");
//	}
//https://codeforces.com/contest/1708
//	printf("\n");
//}
int main()
{
	int T=1;
	scanf("%d",&T);
	while(T--)
	work();
	return 0;
}
2023/7/20 11:04
加载中...