• Educational Codeforces Round 156 (Rated for Div. 2) - B+C


    B. Fear of the Dark

    其实刚开始我想到了需要考虑o点和p点同时包含在a圆或者b圆中的情况;也考虑到了相切的情况
    但是后来看题解后发现,在相切的时候,还需要满足o点和p点能够被包含在a圆或者b圆中

    #include 
    #include 
    #include 
    #include 
    using namespace std;
    const int N = 1e6 + 10;
    #define de(x) cout << x << " ";
    // int n, m, ans;
    double px, py, ax, ay, bx, by;
    double dis(double x1, double y1, double x2, double y2) {
        return sqrt(1.0 * (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
    }
    void solve() {
        cin >> px >> py >> ax >> ay >> bx >> by;
        double ao = dis(0, 0, ax, ay);
        double bo = dis(0, 0, bx, by);
        double ap = dis(px, py, ax, ay);
        double bp = dis(px, py, bx, by);
        double ab = dis(ax, ay, bx, by);
        double ans = 1e9;
        ans = min(ans, max(ao, ap));  // 表示o点和p点在a圆中
        ans = min(ans, max(bo, bp));  // 表示o点和p点在b圆中
        // 表示o点和p点分别在a圆或者b圆中,此时还需要满足相切的条件
        ans = min(ans, max(ab / 2, max(ap, bo)));
        ans = min(ans, max(ab / 2, max(ao, bp)));
        printf("%.10lf\n", ans);
    }
    int main() {
        int T;
        cin >> T;
        while (T--) {
            solve();
        }
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    C. Decreasing String

    看了官方题解才写出来,很巧妙
    思路见代码注释

    #include 
    using namespace std;
    #define ll long long
    #define sf(x) scanf("%d", &x);
    #define de(x) cout << x << " ";
    #define Pu puts("");
    const int N = 2e4 + 9, mod = 1e9 + 7;
    // int n, m;
    string s;
    ll pos;
    ll len;
    stack<char> q;
    void solve() {
        cin >> s >> pos;
        pos--;  // 注意下标是从0开始的
        len = s.size();
        while (!q.empty())
            q.pop();
        bool ok = (pos < len);
        s += '$';  // 很小的ascll码
        for (auto c : s) {
            while (!ok && !q.empty() && q.top() > c) {
                pos -= len;  // 核心,使用线性的复杂度
                // 我们只需要动一个就已经处理了当前长度len下的字符串
                // 而且前面已经在栈中的我们不需要动,因为下一个len-1长度下
                // 需要在栈中已有元素的基础上进行
                len--;
                q.pop();
                if (pos < len)
                    ok = true;  // 如果
            }
            q.push(c);
        }
        string tmp = "";
        while (!q.empty())
            tmp += q.top(), q.pop();
    
        reverse(tmp.begin(), tmp.end());  // 注意这里需要翻转
        // 因为我们得到的字符串是从后往前的
    
        cout << tmp[pos];
    }
    int main() {
        int T;
        cin >> T;
        while (T--) {
            solve();
        }
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
  • 相关阅读:
    8条github使用小技巧
    Acise : A CAx Industrial Software Ecology
    计算机毕业设计Java校园网上跳蚤书市系统(源码+系统+mysql数据库+Lw文档)
    CENTOS上的网络安全工具(十)MapReduce调试环境构建
    druid keepAlive 导致数据库连接数飙升
    MySQL数据库的性能优化及自动化运维与Mysql高并发优化详细教程
    【云原生 | 从零开始学Kubernetes】十二、k8spod的生命周期与容器钩子
    JVS基础框架:如何获取子表单的值赋值给当前主表单
    UML图与List集合
    第7集丨我找不着北:心学与理学的PK
  • 原文地址:https://blog.csdn.net/weixin_52490191/article/details/133812497