0729

已结束 IOI 开始于: 2026-7-29 13:30 3 小时 主持人: 3
#include <bits/stdc++.h>
#define ll long long
#define maxn 100005
#define mod 998244353
using namespace std;
int p[maxn+5],prime[maxn],tot;
ll n;
ll best=0,num=0,ok;
int zd=0;
map<pair<ll,ll>,int> vis;
void dfs(ll i,ll x,ll y,ll now)
{
	ll tx=x,ty=y,tt=0,ii=i;
	while (tx*prime[ii]<=n) {tx*=prime[ii++]; tt++;}
	ii=i;
	while (ty*prime[ii]<=n) {ty*=prime[ii++]; tt++;}
//	cout<<i<<" "<<x<<" "<<y<<endl;
	zd=max(zd+0ll,i);
	if (x<0 || y<0) exit(1);
	if (tt+now<best) return;
	if (now>=best)
	{
		if (now>best) best=now,num=1,ok=i;
		else num++,ok=max(i,ok);
	}
	ll t1=x,t2=y;
	while (true)
	{
		t1*=prime[i]; t2*=prime[i];
		if (t1>n && t2>n) break;
		if (t1>n) t1=n+1; if (t2>n) t2=n+1;
		if (t1<=n) dfs(i+1,t1,y,now+1);
		if (x!=1 && t2<=n) dfs(i+1,x,t2,now+1);
	}
	if (prime[i+1]*min(x,y)<=n) dfs(i+1,x,y,now);
	return;
}
void init()
{
	for (int i=2;i<=maxn;i++)
	if (!p[i])
	{
		prime[++tot]=i;
		for (int j=i+i;j<=maxn;j+=i) p[j]=1;
	}
}
int main()
{
	//freopen("select.in","r",stdin);
	//freopen("select.out","w",stdout); 
	init();
	cin>>n;
	dfs(1,1,1,0);
	cout<<best<<" "<<num<<endl;
//	cout<<prime[ok]<<endl;
}
状态
已结束
规则
IOI
题目
5
开始于
2026-7-29 13:30
结束于
2026-7-29 16:30
持续时间
3 小时
主持人
参赛人数
3