cf826-C. Place for a Selfie
给n条直线和m条开口向上的抛物线,问对于每条抛物线来说,存不存在和它不相交的直线,存在的话,输出直线的斜率。
直线与抛物线联立,(b-k)^2-4ac<0则不相交,|b-k|越小越好,所以k从最接近b的范围左右查找,一旦相交就break。
struct node
{
ll a,b,c;
}t[NN];
void check(ll i)
{
ll aa=t[i].a,bb=t[i].b,cc=t[i].c;
int pos=lower_bound(b,b+n+1,bb)-b;
for(int j=pos;j<n;j++)
{
k=b[j];
ll res=(bb-k)*(bb-k)-4*aa*cc;
if(res<0)
{
cout<<"YES\n"<<k<<"\n";
return;
}
else break;
}
for(int j=pos-1;j>=0;j--)
{
k=b[j];
ll res=(bb-k)*(bb-k)-4*aa*cc;
if(res<0)
{
cout<<"YES\n"<<k<<"\n";
return;
}
else break;
}
cout<<"NO\n";
}
void solve()
{
cin>>n>>m;
for(int i=0;i<n;i++)cin>>b[i];
for(int i=0;i<m;i++)cin>>t[i].a>>t[i].b>>t[i].c;
sort(b,b+n);
b[n]=INF;
for(int i=0;i<m;i++)
{
check(i);
}
cout<<"\n";
}
edu131-C. Schedule Management
bool check(ll x)
{
ll res=0;
for(int i=1;i<=n;i++)
{
ll tmp=min(x,mp[i]);
res+=tmp+(x-tmp)/2;
if(res>=m)return 1;
}
return 0;
}
void solve()
{
mp.clear();
cin>>n>>m;
for(int i=0;i<m;i++)cin>>b[i],mp[b[i]]++;
ll l=0,r=1e9;
while(l<r)
{
ll mid=(l+r)/2;
if(check(mid))r=mid;
else l=mid+1;
}
cout<<l<<'\n';
}