Codeforces Round 862 (div.2) C

vp时c题用自已的方法过了,赛后补下正解

C.Place for a Selfie

Problem - C - Codeforces

题意

给定一些抛物线和过原点的直线,对于每个抛物线,是否存在一条直线与它相交。

思路

联系y=kxy=ax2+bx+c,可得ax2+(bk)x+c=0。如果无解要满足,b24ac<0k22bk+b24ac<0。因为题目给的抛物线是开口向上的,所以在对称轴位置也就是kb时不等式左边最小。

所以对k进行排序,在二分查找后判断不等式是否成立即可。

代码

bool func(int a, int b, int c) {
    return 1ll * b * b < 4ll * a * c; 
}

void solve() {
    int n, m;
    cin >> n >> m;

    vector<int> k(n);
    for(int i = 0; i < n; i++) {
        cin >> k[i];
    }
    sort(k.begin(), k.end());

    while(m--) {
        int a, b, c;
        cin >> a >> b >> c;
        auto it = lower_bound(k.begin(), k.end(), b);
        if(it != k.end() && func(a, b - *it, c)) {
            cout << "YES\n" << *it << "\n";
        }
        else if(it != k.begin() && func(a, b - *prev(it), c)) {
            cout << "YES\n" << *prev(it) << "\n";
        }
        else {
            cout << "NO\n";
        }
    }
}
posted @   wuyoudexian  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示