QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#494751#9141. Array SpreadPhantomThreshold#WA 8ms3624kbC++202.6kb2024-07-27 16:50:222024-07-27 16:50:22

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 16:50:22]
  • 评测
  • 测评结果:WA
  • 用时:8ms
  • 内存:3624kb
  • [2024-07-27 16:50:22]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
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];
		}
		//[li,ri)
		auto check=[&](int P,int Q)
		{
			vector<vector<pair<int,int>>> G(idx+5);
			for(int i=1;i<=m;i++)
			{
				G[L[i]].emplace_back(R[i],P);
				G[R[i]].emplace_back(L[i],-Q);
			}
			for(int i=1;i<idx;i++)
				G[i+1].emplace_back(i,0);
			vector<long long> dis(idx+5),cnt(idx+5);
			queue<int> q;
			for(int i=1;i<=idx;i++)
			{
				q.push(i);
			}
			while(not q.empty())
			{
				int u=q.front();q.pop();
				for(auto [v,w]:G[u])
				{
					if(dis[v]>dis[u]+w)
					{
						dis[v]=dis[u]+w;
						cnt[v]++;
						if(cnt[v]>idx)return false;
						q.push(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=1e9;//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;
		while(1)
		{
//			cerr<<"gp "<<l.p<<"/"<<l.q<<'~'<<r.p<<"/"<<r.q<<endl;
			if((l+r).p>lim or (l+r).q>lim)break;
			if(dir==0)
			{
				int kl=1,kr=min((lim-r.p)/l.p,(lim-r.q)/l.q);
				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=1,kr=min((lim-l.p)/r.p,(lim-l.q)/r.q);
				while(kl<kr)
				{
					int km=(kl+kr)/2;
					frac tmp=l+r*km;
					if(check(tmp.p,tmp.q))
					{
						if(tmp<ans)ans=tmp;
						kr=km;
					}
					else
						kl=km+1;
				}
				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: 3488kb

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: 8ms
memory: 3524kb

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: -100
Wrong Answer
time: 7ms
memory: 3624kb

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:

wrong answer 528th numbers differ - expected: '3', found: '1755647'