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

    A.

    解一个方程。

    还是厚颜无耻地暴力吧~

    #include <iostream>
    using namespace std;
    
    int r1, r2, c1, c2, d1, d2;
    bool chk(int x1, int x2, int x3, int x4)
    {
        int ok = 1;
        if(x1 == x2 || x1 == x3 || x1 == x4 || x2 == x3 || x2==x4 || x3==x4) ok = 0;
        if(x1 + x2 != r1) ok = 0;
        if(x3 + x4 != r2) ok = 0;
        if(x1 + x3 != c1) ok = 0;
        if(x2 + x4 != c2) ok = 0;
        if(x1 + x4 != d1) ok = 0;
        if(x2 + x3 != d2) ok = 0;
        return ok;
    }
    
    int main()
    {
        cin >> r1 >> r2 >> c1 >> c2 >> d1 >> d2;
        for(int x1=1;x1<=9;x1++)for(int x2=1;x2<=9;x2++)
            for(int x3=1;x3<=9;x3++)for(int x4=1;x4<=9;x4++) {
                if(chk(x1, x2, x3, x4)) {
                    cout << x1 << " " << x2 << endl;
                    cout << x3 << " " << x4 << endl;
                    return 0;
                }
            }
        cout << -1 << endl;
    }
    

    B.

    可以练一练码力的题。

    #include <iostream>
    #include <cstring>
    #include <vector>
    using namespace std;
    char s[202];int minu = 0, n, dot;
    vector<char> v;
    void rush() {
        if(s[1] == '-') minu = 1;
        else return;
    
        for(int i=1;i<=n-1;i++) {
            s[i] = s[i+1];
        }
        n --; dot --;
    }
    int main()
    {
        scanf("%s", s+1);
        n = strlen(s+1);
        dot = n+1;
        for(int i=1;i<=n;i++)
        {
            if(s[i] == '.') dot = i;
        }
        rush();
        v.push_back(s[1]);
        for(int i=2;i<=min(n, dot+2);i++) {
            if((dot - i) % 3 == 0 && dot != i) {
                v.push_back(',');
            }
            v.push_back(s[i]);
        }
        if(dot == n-1) v.push_back('0');
        if(dot == n+1) v.push_back('.'), v.push_back('0'), v.push_back('0');
        if(minu) printf("(");
        printf("$");
        for(int i=0;i<v.size();i++) {
            printf("%c", v[i]);   
        }
        if(minu) printf(")");
    }
    

    C. 给出X,求Y-X的最大值与最小值。

    X = A * B * C [A,B,C皆为正整数]

    Y = (A+1) * (B+2) * (C+2) [取名为①式]

    题解:

    我们可以用sqrt(X)的复杂度枚举A。

    展开吧!①式!

    然后就会发现。B, C越接近,Y越小。【根据基本不等式得到的】

    然后开始枚举B的值。【枚举姿势:从sqrt(X/A)向1枚举B】

    #include <cmath>
    #include <iostream>
    using namespace std;
    typedef long long LL;
    LL n, minc = 1e15, maxc = -1e15;
    void solve(LL a) {
        LL t = n / a;
        maxc = max(maxc, (a+1)*(t+2)*(LL)3 - n);
        LL tmp = (LL)sqrt(t) + 1;
        for(LL b = tmp; b >= 1; b--) {
            if(t % b == 0) {
                minc = min(minc, (a+1)*(b+2)*(t/b+2) - n);
            }
        }
    
    }
    int main()
    {
        cin >> n;
        for(LL a = 1; a * a <= n; a ++) {
            if(n % a == 0) {
                solve(a);
                solve(n/a);
            }
        }
        cout << minc << " " << maxc << endl;
    }
    

      

    D. 

    很有趣的一题!

    给一个n * m的棋盘。往上放棋子。

    然后往上放棋子。如果一个骑士可以从A跳到B。那么A和B不能同时放棋子。

    问最多可以放几个棋子。

    思路:

    先将棋盘按照国际象棋棋盘的方式染色。【就是黑白交错的那种啦!】

    然后发现骑士从黑格子只能跳到白格子。从白格子只能跳到黑格子。

    所以我们可以在所有黑格子上放棋子。于是可以放$frac{(mn+1)}{2}$个棋子

    不妨设m <= n

    当m=1时,$ans = n$

    当m=2时,

    ans = n+1 (n为奇数)

    ans = n+2 (n%4=2) 

    构造方法如下:

    AABBAABBAA

    AABBAABBAA

    A表示放置棋子。B表示不放棋子

    #include <iostream>
    using namespace std;
    int n, m;
    
    int main()
    {
        cin >> n >> m;
        int ans = (m*n+1)/2;
        if(n > m) swap(n, m);
        if(n == 1) ans = m;
        if(n == 2) {
            if(m % 2 == 1) ans = m+1;
            if(m % 4 == 2) ans = m+2; 
        }
        cout << ans << endl;
    }
    

      

  • 相关阅读:
    HDU 1022 Train Problem I
    HDU 1702 ACboy needs your help again!
    HDU 1294 Rooted Trees Problem
    HDU 1027 Ignatius and the Princess II
    HDU 3398 String
    HDU 1709 The Balance
    HDU 2152 Fruit
    HDU 1398 Square Coins
    HDU 3571 N-dimensional Sphere
    HDU 2451 Simple Addition Expression
  • 原文地址:https://www.cnblogs.com/RUSH-D-CAT/p/6909558.html
Copyright © 2011-2022 走看看