关于数组赋值的时间复杂度疑问
查看原帖
关于数组赋值的时间复杂度疑问
377969
george0929楼主2023/5/18 19:54

83分TLE代码:

#include<bits/stdc++.h>
using namespace std;
int arr[105],pq[100005],pos[105];
int main(){
	int k,n;
	scanf("%d%d",&k,&n);
	for(int i=1;i<=k;i++){
		scanf("%d",&arr[i]);
	}
	pq[0]=1;
	for(int cnt=1;cnt<=n;cnt++){
		int mn=2147483647;
		for(int i=1;i<=k;i++){
			pos[i]=0;
			while(arr[i]*pq[pos[i]]<=pq[cnt-1]){
				pos[i]++;
			}
			if(arr[i]*pq[pos[i]]<mn){
				mn=arr[i]*pq[pos[i]];
			}
		}
		pq[cnt]=mn;
	}
	printf("%d",pq[n]);
}

100分代码:

#include<bits/stdc++.h>
using namespace std;
int arr[105],pq[100005],pos[105];
int main(){
	int k,n;
	scanf("%d%d",&k,&n);
	for(int i=1;i<=k;i++){
		scanf("%d",&arr[i]);
	}
	pq[0]=1;
	for(int cnt=1;cnt<=n;cnt++){
		int mn=2147483647;
		for(int i=1;i<=k;i++){
			
			while(arr[i]*pq[pos[i]]<=pq[cnt-1]){
				pos[i]++;
			}
			if(arr[i]*pq[pos[i]]<mn){
				mn=arr[i]*pq[pos[i]];
			}
		}
		pq[cnt]=mn;
	}
	printf("%d",pq[n]);
}

区别就是一个用数组存的下标,一个用变量存的下标。

就离谱。。。

2023/5/18 19:54
加载中...