萌新求助,不知为什么错啊
查看原帖
萌新求助,不知为什么错啊
98618
Provicy楼主2021/1/3 15:23

RT

#include <bits/stdc++.h>
#pragma GCC optimize(3)
#define int long long
#define ri register
#define mk make_pair
#define fi first
#define se second
#define pb push_back
#define eb emplace_back
#define is insert
#define es erase
using namespace std; const int N=200010;
inline int read()
{
	int s=0, w=1; ri char ch=getchar();
	while(ch<'0'||ch>'9') { if(ch=='-') w=-1; ch=getchar(); }
	while(ch>='0'&&ch<='9') s=(s<<3)+(s<<1)+(ch^48), ch=getchar();
	return s*w;
}
int n,a[N];
signed main()
{
	n=read();
	for(ri int i=1;i<=n;i++) a[i]=read();
	if(a[n]!=2) return puts("-1")&0;
	int L=2, R=3;
	for(ri int i=n-1;i;i--)
	{
		if(L>R) return puts("-1")&0;
		int l,r;
		l=0, r=1e9;
		int p1=-1,p2=-1;
		while(l<=r)
		{
			int mid=(l+r)/2;
			if(mid*a[i]>=L) p1=mid, r=mid-1;
			else l=mid+1;
		}
		l=0, r=1e9;
		while(l<=r)
		{
			int mid=(l+r)/2;
			if(mid*a[i]<=R) p2=mid, l=mid+1;
			else r=mid-1;
		}
		L=p1*a[i], R=p2*a[i]+a[i]-1;
		//printf("%lld %lld\n",L,R);
	}
	if(L>R) puts("-1");
	else printf("%lld %lld\n",L,R);
	return 0;
}
2021/1/3 15:23
加载中...