結果

問題 No.3054 Modulo Inequalities
ユーザー 沙耶花
提出日時 2025-03-07 23:15:49
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
TLE  
実行時間 -
コード長 1,486 bytes
コンパイル時間 4,206 ms
コンパイル使用メモリ 251,340 KB
実行使用メモリ 16,060 KB
最終ジャッジ日時 2025-03-07 23:15:59
合計ジャッジ時間 10,046 ms
ジャッジサーバーID
(参考情報)
judge3 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 12 TLE * 1 -- * 18
権限があれば一括ダウンロードができます
コンパイルメッセージ
main.cpp: In function ‘int main()’:
main.cpp:21:22: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   21 |                 scanf("%d %d",&a,&b);
      |                 ~~~~~^~~~~~~~~~~~~~~

ソースコード

diff #

#include <stdio.h>
#include <bits/stdc++.h>
#include <atcoder/all>
using namespace atcoder;
using mint = modint998244353;
using namespace std;
#define rep(i,n) for (int i = 0; i < (n); ++i)
#define Inf32 1000000000
#define Inf64 1000000000000000001LL
int x[3000],y[3000];
int z[6000];
int main(){
	
	int n;
	cin>>n;
	
	
	vector<int> imos(1000002);
	rep(i,n){
		int a,b;
		scanf("%d %d",&a,&b);
		int ja = 0,jb = 0;
		for(int j=1;j<=a;j++){
			x[ja] = j;
			ja++;
			j = a/(a/j);
		}
		x[ja] = a+1;
		ja++;
		for(int j=1;j<=b;j++){
			y[jb] = j;
			jb++;
			j = b/(b/j);
		}
		y[jb] = b+1;
		jb++;
		int jc = 0;
		int ta = 0,tb = 0;
		while(ta<ja && tb<jb){
			if(x[ta]<y[tb]){
				z[jc] = x[ta];
				ta++;
			}
			else{
				z[jc] = y[tb];
				tb++;
			}
			jc++;
		}
		while(ta<ja){
			z[jc] = x[ta];
			ta++;
			jc++;
		}
		while(tb<jb){
			z[jc] = y[tb];
			tb++;
			jc++;
		}
		jc--;
		rep(j,jc){
			if(j!=jc-1 && z[j]==z[j+1])continue;
			int d = b%z[j] - a%z[j];
			int aa = -(b/z[j]) + (a/z[j]);
			if(d>0){
				if(aa >= 0)imos[z[j]]++,imos[z[j+1]]--;
				else{
					imos[z[j]]++;
					imos[min(z[j+1],z[j] + (d-aa-1)/(-aa))]--;
				}
			}
			else{
				if(aa>0){
					imos[min(z[j+1], (1-d+aa-1)/aa+z[j])]++;
					imos[z[j+1]]--;
				}
			}
		}
		if(a<b)imos[b+1]++;
	}
	rep(i,imos.size()-1)imos[i+1] += imos[i];
	/*
	rep(i,10){
		cout<<i<<' '<<imos[i]<<endl;
	}
		*/
	int ans = 1;
	for(int i=1;i<imos.size();i++){
		if(imos[ans]<imos[i])ans = i;
	}
	cout<<ans<<endl;
	return 0;
}
0