题解:P17348 [ECNA 2025] How Many Balls?
思路
由于
因为
所以
拆开得
整理得
我们知道,对于方程
令
则
将
复杂度分析
时间复杂度为
代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int R=1000000;
int a,b,c,p,q;
void Get(int &ans1,int &ans2)
{
int D=b*b-4*a*c;
ans1=ans2=-1;
if(D<0) return;
int Sq=(int)sqrt(D);
if(Sq*Sq!=D) return;
if((-b-Sq)%(2*a)==0) ans1=(-b-Sq)/(2*a);
if((-b+Sq)%(2*a)==0) ans2=(-b+Sq)/(2*a);
}
bool check(int r,int g)
{
if(g<r) return 0;
return 2*q*r*g==p*(r+g)*(r+g-1);
}
signed main()
{
cin>>p>>q;
for(int r=1,g1,g2;r<=R;r++)
{
a=p,b=2*p*r-2*q*r-p,c=p*r*r-p*r;
Get(g1,g2);
if(check(r,g1))
{
cout<<r<<' '<<g1;
return 0;
}
if(check(r,g2))
{
cout<<r<<' '<<g2;
return 0;
}
}
cout<<"impossible";
}