60pts 感觉自己的思路很清奇?
查看原帖
60pts 感觉自己的思路很清奇?
781761
shaotianyu楼主2024/10/20 12:32

不知道有没有跟我思路一样的()

我这个输出的答案是正确的 但是时间开销较大 所以TLE了 想请问正解做法

#include <iostream>
#define int long long
using namespace std;
const int M=1e9+7;
const int N=2e5+10;

int m[N],a[N],up[N],down[N];
int n;

signed main(){
	scanf("%lld",&n);
	for(int i=1;i<=n;i++) scanf("%lld",&m[i]);
	for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
	
	int lim=-1;
	for(int i=1;i<=n;i++){
		up[i]=m[i]-a[i];
		down[i]=a[i]-1;
		lim=max(lim,max(up[i],down[i]));
	}
	
	int i=1,ans=1;
	for(;i<=lim;i++){
		int add=1;
		for(int j=1;j<=n;j++){
			int now=0;
			if(up[j]>=i) now++;
			if(down[j]>=i) now++;
			add=add*(now%M);
			add%=M; 
		}
		ans+=add%M;
		ans%=M;
		if(!add) break;
	}
	
	printf("%lld",ans%M);
	return 0;
}

2024/10/20 12:32
加载中...