QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#494939#9141. Array SpreadPhantomThreshold#WA 45ms3832kbC++203.0kb2024-07-27 17:45:152024-07-27 17:45:20

Judging History

你现在查看的是最新测评结果

  • [2024-09-18 18:58:44]
  • hack成功,自动添加数据
  • (/hack/840)
  • [2024-09-18 18:53:02]
  • hack成功,自动添加数据
  • (/hack/839)
  • [2024-07-29 03:53:23]
  • hack成功,自动添加数据
  • (/hack/753)
  • [2024-07-29 03:51:16]
  • hack成功,自动添加数据
  • (/hack/752)
  • [2024-07-29 03:50:24]
  • hack成功,自动添加数据
  • (/hack/751)
  • [2024-07-29 03:48:52]
  • hack成功,自动添加数据
  • (/hack/750)
  • [2024-07-27 17:45:20]
  • 评测
  • 测评结果:WA
  • 用时:45ms
  • 内存:3832kb
  • [2024-07-27 17:45:15]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
const int QSZ=10000;
int q[11111],ql,qr;
int main()
{
	ios_base::sync_with_stdio(false);
	int T;
	cin>>T;
	while(T--)
	{
		int n,m;
		cin>>n>>m;
		vector<int> L(m+5),R(m+5);
		map<int,int> mp;
		for(int i=1;i<=m;i++)
		{
			cin>>L[i]>>R[i];
			mp[L[i]]=mp[R[i]+1]=0;
		}
		int idx=0;
		for(auto &[x,y]:mp)
		{
			y=++idx;
		}
		for(int i=1;i<=m;i++)
		{
			L[i]=mp[L[i]];
			R[i]=mp[R[i]+1];
		}
		vector<vector<pair<int,int>>> G(idx+5);
		for(int i=1;i<=m;i++)
		{
//				cerr<<L[i]<<' '<<R[i]<<endl;
			G[L[i]].emplace_back(R[i],1);
//				cerr<<R[i]<<' '<<L[i]<<endl;
			G[R[i]].emplace_back(L[i],-1);
		}
		for(int i=1;i<idx;i++)
		{
//				cerr<<i+1<<' '<<i<<endl;
			G[i+1].emplace_back(i,0);
		}
		//[li,ri)
		auto check=[&](int P,int Q)
		{
			vector<long long> dis(idx+5),cnt(idx+5),inq(idx+5);
			ql=1;qr=0;
			for(int i=1;i<=idx;i++)
			{
				qr=(qr+1)%QSZ;
				q[qr]=i;
				inq[i]=1;
			}
			while(ql<=qr)
			{
				int u=q[ql];ql=(ql+1)%QSZ;
				inq[u]=0;
				for(auto [v,w]:G[u])
				{
					if(w==1)w=P;else if(w==-1)w=-Q;
					if(dis[v]>dis[u]+w)
					{
						dis[v]=dis[u]+w;
						if(not inq[v])
						{
							cnt[v]++;
							if(cnt[v]>idx)return false;
							inq[v]=1;
							qr=(qr+1)%QSZ;
							q[qr]=v;
						}
					}
				}
			}
			return true;
		};
		/*
		for(int i=1;i<=5;i++)
			for(int j=1;j<=i;j++)
			{
				if(gcd(i,j)!=1)continue;
				cerr<<i<<' '<<j<<' '<<check(i,j)<<endl;
			}
		*/
		const int lim=4000*4000;
		struct frac
		{
			int p,q;
			frac operator+(const frac &f)const{return {p+f.p,q+f.q};}
			frac operator*(const int k)const{return {p*k,q*k};}
			bool operator<(const frac &f)const{return 1ll*p*f.q<1ll*q*f.p;}
		}ans{lim,1},l{1,1},r{1,0};
		if(check(1,1))
		{
			ans={1,1};
		}
		int dir=0,fir=1;
		while(1)
		{
//			cerr<<"gp "<<l.p<<"/"<<l.q<<'~'<<r.p<<"/"<<r.q<<' '<<dir<<endl;
			if((l+r).p>lim or (l+r).q>lim)break;
			if(dir==0)
			{
				int kl=(!fir),kr=min((lim-r.p)/max(l.p,1),(lim-r.q)/max(l.q,1));
			//	fir=0;
				while(kl<kr)
				{
					int km=(kl+kr+1)/2;
					frac tmp=l*km+r;
					if(check(tmp.p,tmp.q))
					{
						if(tmp<ans)ans=tmp;
						kl=km;
					}
					else
						kr=km-1;
				}
				r=l*kl+r;
				if(r<ans and check(r.p,r.q))ans=r;
				dir^=1;
			}
			else
			{
				int kl=(!fir),kr=min((lim-l.p)/max(r.p,1),(lim-l.q)/max(r.q,1));
				while(kl<kr)
				{
					int km=(kl+kr+1)/2;
					frac tmp=l+r*km;
					if(check(tmp.p,tmp.q))
					{
						if(tmp<ans)ans=tmp;
						kr=km-1;
					}
					else
						kl=km;
				}
				l=l+r*kl;
				if(l<ans and check(l.p,l.q))ans=l;
				dir^=1;
			}
		}
		const int MOD=998244353;
		auto poww=[&](long long x,int y)
		{
			long long ret=1;
			while(y)
			{
				if(y&1)ret*=x,ret%=MOD;
				x*=x,x%=MOD;
				y>>=1;
			}
			return ret;
		};
//		cerr<<"ans = "<<ans.p<<'/'<<ans.q<<endl;
		cout<<1ll*ans.p*poww(ans.q,MOD-2)%MOD<<"\n";
	}
	
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 3592kb

input:

3
3 3
1 3
2 3
1 2
12 6
2 3
5 7
1 9
4 8
1 2
7 11
4 5
3 4
2 3
1 2
4 4
1 1

output:

1
2
499122178

result:

ok 3 number(s): "1 2 499122178"

Test #2:

score: 0
Accepted
time: 7ms
memory: 3552kb

input:

2000
1000000000 1
259923446 367011266
1000000000 1
882434225 971573327
1000000000 1
41585677 470369580
1000000000 1
371902212 947250194
1000000000 1
787209148 924205796
1000000000 1
259074809 960876164
1000000000 1
148079314 188254573
1000000000 1
940091047 948318624
1000000000 1
40636497 743979446
...

output:

1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
...

result:

ok 2000 numbers

Test #3:

score: 0
Accepted
time: 7ms
memory: 3832kb

input:

1000
1000000000 5
575330909 661595447
708422488 913945134
658050911 930246647
786571892 904549453
851755566 969150871
1000000000 2
198072104 844159589
8876188 644559580
1000000000 2
740802634 976972118
783909534 898449184
1000000000 2
871819537 941611957
465883854 640988372
1000000000 1
99458969 462...

output:

1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2
1
1
1
1
...

result:

ok 1000 numbers

Test #4:

score: 0
Accepted
time: 18ms
memory: 3632kb

input:

500
1000000000 13
964546318 987364574
367845944 907446075
259314137 890312338
458318546 959971971
353677471 522446336
782931403 845199078
514387878 786979588
532634932 793056892
905393511 960628299
747423889 986373313
796099347 833069525
906969434 971335651
574582540 647534593
1000000000 6
987712893...

output:

3
1
3
1
1
1
1
1
1
3
2
1
1
1
3
1
2
1
1
2
1
3
1
1
1
2
1
2
2
1
1
1
1
1
1
1
3
1
1
1
1
2
1
1
1
1
2
1
1
1
1
1
2
1
1
1
1
1
1
1
2
2
1
1
3
1
2
1
1
1
1
2
3
1
1
1
1
1
1
1
3
2
1
3
2
1
1
1
1
1
1
1
1
1
1
1
1
1
2
1
2
1
1
1
1
1
1
1
1
1
2
1
2
1
1
1
3
1
1
1
1
1
1
1
2
1
1
2
1
1
1
2
1
4
1
2
1
4
1
3
1
1
1
1
1
2
1
1
4
1
...

result:

ok 500 numbers

Test #5:

score: -100
Wrong Answer
time: 45ms
memory: 3688kb

input:

250
1000000000 10
844342043 888135880
127033337 726074967
581308029 893912240
414276384 752837267
565680461 863374082
230362895 477723054
210479116 423381051
325072305 427826920
178306222 756423471
376470949 993759748
1000000000 2
468173597 607783582
266359996 863641680
1000000000 7
206599093 941381...

output:

2
1
2
1
3
3
1
1
1
2
1
2
2
1
3
5
2
1
1
1
2
1
2
1
3
1
2
1
3
499122178
1
1
1
1
3
1
1
1
3
3
3
1
4
1
1
1
1
1
1
1
1
5
1
4
2
1
3
1
1
1
2
5
2
1
2
6
2
2
1
2
1
1
1
5
1
2
1
2
1
1
2
2
2
1
1
5
8
3
1
1
1
8
2
6
1
1
4
2
1
1
1
1
2
2
1
2
1
1
1
1
1
1
2
1
2
1
1
4
1
1
3
1
2
3
3
2
5
1
1
1
3
2
1
1
1
3
1
1
2
1
1
1
1
3
1
1
...

result:

wrong answer 75th numbers differ - expected: '8', found: '1'