zoukankan      html  css  js  c++  java
  • Codeforces Round #340 (Div. 2)

    题目链接:https://codeforces.com/contest/617

    A - Elephant

    事到如今这种三行签到是真的送的真诚。

    B - Chocolate

    题意:要把一块巧克力长条分成若干段,让每段都恰有1颗榛子,求方案数。

    题解:每段被1包围的0,提供其数量+1的方案数。dp解法的话好像要分几种情况写的。

    C - Watering Flowers

    题意:有n<=2000个点,每个点表示一盆花。给花浇水,每盆花至少要1号喷头或者2号喷头其中之一喷到(指在圆内)。最小化喷头的圆的总面积。

    题解:数据量小,直接暴力,枚举一个点是1号喷头的边界点,剩下的喷不到的就是2号喷头的。(这样会漏掉全部都由2号喷头来喷的情况!)

    ll x[2005], y[2005];
     
    void test_case() {
        int n;
        ll x1, y1, x2, y2;
        cin >> n >> x1 >> y1 >> x2 >> y2;
        for(int i = 1; i <= n; ++i)
            cin >> x[i] >> y[i];
        ll ans = LINF;
        for(int i = 1; i <= n; ++i) {
            ll R1 = (x[i] - x1) * (x[i] - x1) + (y[i] - y1) * (y[i] - y1);
            ll maxR2 = 0;
            for(int j = 1; j <= n; ++j) {
                ll dis1 = (x[j] - x1) * (x[j] - x1) + (y[j] - y1) * (y[j] - y1);
                if(dis1 > R1) {
                    ll dis2 = (x[j] - x2) * (x[j] - x2) + (y[j] - y2) * (y[j] - y2);
                    maxR2 = max(maxR2, dis2);
                }
            }
            ans = min(ans, R1 + maxR2);
        }
        ll maxR2 = 0;
        for(int j = 1; j <= n; ++j) {
            ll dis2 = (x[j] - x2) * (x[j] - x2) + (y[j] - y2) * (y[j] - y2);
            maxR2 = max(maxR2, dis2);
        }
        ans = min(ans, maxR2);
        cout << ans << endl;
    }
    

    D

    分类讨论进阶,我吐了。

    void test_case() {
        ll x1, y1, x2, y2, x3, y3;
        cin >>  x1 >> y1 >> x2 >> y2 >> x3 >> y3;
        int ans = 3;
        if(x1 == x2) {
            if(x2 == x3)
                ans = min(ans, 1);
            else if(y3 >= max(y1, y2) || y3 <= min(y1, y2))
                ans = min(ans, 2);
            else
                ans = min(ans, 3);
        } else if(y1 == y2) {
            if(y2 == y3)
                ans = min(ans, 1);
            else if(x3 >= max(x1, x2) || x3 <= min(x1, x2))
                ans = min(ans, 2);
            else
                ans = min(ans, 3);
        } else {
            if(x1 == x3 || x2 == x3) {
                if(y1 > y2)
                    swap(x1, x2), swap(y1, y2);
                if(y3 <= max(y1, y2) && y3 >= min(y1, y2))
                    ans = min(ans, 2);
                else if(x1 == x3 && y3 <= y1)
                    ans = min(ans, 2);
                else if(x2 == x3 && y3 >= y2)
                    ans = min(ans, 2);
                else
                    ans = min(ans, 3);
            } else if(y1 == y3 || y2 == y3) {
                if(x1 > x2)
                    swap(x1, x2), swap(y1, y2);
                if(x3 <= max(x1, x2) && x3 >= min(x1, x2))
                    ans = min(ans, 2);
                else if(y1 == y3 && x3 <= x1)
                    ans = min(ans, 2);
                else if(y2 == y3 && x3 >= x2)
                    ans = min(ans, 2);
                else
                    ans = min(ans, 3);
            } else
                ans = min(ans, 3);
        }
        cout << ans << endl;
    }
    
  • 相关阅读:
    不打无准备之仗,最全868道Java面试题及答案
    准备两个月,面试五分钟,Java岗面试为何越来越难?
    2020JAVA面试必备的26个关键知识点,刷完大厂随便跳
    2020年最全java面试真题解析(980道),你没见过的面试题都在这
    java大厂面试200+(含答案):基础+缓存+网络+分布式....
    判断js中的数据类型的几种方法
    JPG、PNG、GIF、SVG 等格式图片区别
    js闭包
    什么是 js 变量提升 (Javascript Hoisting)
    js函数声明和函数表达式的区别
  • 原文地址:https://www.cnblogs.com/KisekiPurin2019/p/12287950.html
Copyright © 2011-2022 走看看