zoukankan      html  css  js  c++  java
  • Codeforces Round #644 (Div. 3)

    A

    分两种情况
    设 a < b
    要么 宽(a)两倍覆盖长(b), 边长为 a * 2
    要么 直接长(b)覆盖宽 边长 b

    #include <bits/stdc++.h>
    #define all(n) (n).begin(), (n).end()
    #define se second
    #define fi first
    #define pb push_back
    #define mp make_pair
    #define sqr(n) (n)*(n)
    #define rep(i,a,b) for(int i=a;i<=b;++i)
    #define per(i,a,b) for(int i=a;i>=b;--i)
    using namespace std;
    typedef long long ll;
    typedef pair<int, int> PII;
    typedef vector<int> VI;
    typedef double db;
     
    const int N = 1e5 + 5;
     
    int n, m, _, k;
     
    int main()
    {
        ios::sync_with_stdio(0); cin.tie(0);
        for (cin >> _; _; --_)
        {
            int a, b, c; cin >> a >> b;
            if (a > b) swap(a, b);
            if ((a << 1) >= b) c = (a << 1);
            else c = b;
            cout << c * c << '
    ';
        }
        return 0;
    }
    

    B

    排序 取相邻差最小值

    #include <bits/stdc++.h>
    #define all(n) (n).begin(), (n).end()
    #define se second
    #define fi first
    #define pb push_back
    #define mp make_pair
    #define sqr(n) (n)*(n)
    #define rep(i,a,b) for(int i=a;i<=b;++i)
    #define per(i,a,b) for(int i=a;i>=b;--i)
    using namespace std;
    typedef long long ll;
    typedef pair<int, int> PII;
    typedef vector<int> VI;
    typedef double db;
     
    const int N = 50 + 5;
     
    int n, m, _, k;
    int s[N];
     
    int main()
    {
        ios::sync_with_stdio(0); cin.tie(0);
        for (cin >> _; _; --_)
        {
            cin >> n;
            rep (i, 1, n) cin >> s[i];
            sort(s + 1, s + 1 + n);
            m = 10000;
            rep (i, 2, n) m = min(m, s[i] - s[i - 1]);
            cout << m << '
    ';
        }
        return 0;
    }
    

    C

    奇偶都为偶数对,yes
    or 寻找一对 a, a + 1, 变成上面的偶数对的情况

    #include <bits/stdc++.h>
    #define all(n) (n).begin(), (n).end()
    #define se second
    #define fi first
    #define pb push_back
    #define mp make_pair
    #define sqr(n) (n)*(n)
    #define rep(i,a,b) for(int i=a;i<=b;++i)
    #define per(i,a,b) for(int i=a;i>=b;--i)
    using namespace std;
    typedef long long ll;
    typedef pair<int, int> PII;
    typedef vector<int> VI;
    typedef double db;
     
    const int N = 50 + 5;
     
    int n, m, _, k;
    int s[N];
     
    int main()
    {
        ios::sync_with_stdio(0); cin.tie(0);
        for (cin >> _; _; --_)
        {
            cin >> n; int a = 0, b = 0; 
            rep (i, 1, n)
            {
                cin >> s[i];
                if (s[i] & 1) ++a;
                else ++b;
            } 
            if (a % 2 == 0) { cout << "YES
    "; continue; }
            sort(s + 1, s + 1 + n);
            int flag = 0;
            rep (i, 2, n) if (s[i] == s[i - 1] + 1) { flag = 1; break; }
            if (flag) cout << "YES
    ";
            else cout << "NO
    ";
        }
        return 0;
    }
    

    D

    暴力

    #include <bits/stdc++.h>
    #define all(n) (n).begin(), (n).end()
    #define se second
    #define fi first
    #define pb push_back
    #define mp make_pair
    #define sqr(n) (n)*(n)
    #define rep(i,a,b) for(int i=a;i<=b;++i)
    #define per(i,a,b) for(int i=a;i>=b;--i)
    using namespace std;
    typedef long long ll;
    typedef pair<int, int> PII;
    typedef vector<int> VI;
    typedef double db;
     
    const int N = 50 + 5;
     
    int n, m, _, k;
    int s[N];
     
    int main()
    {
        ios::sync_with_stdio(0); cin.tie(0);
        for (cin >> _; _; --_)
        {
            cin >> n >> k;
            int ans = n;
            for (int i = 1; i <= k && i * i <= n; ++i)
                if (n % i == 0)
                {
                    int a = n / i;
                    if (a <= k) { ans = i; break; }
                    ans = a;
                }
            cout << ans << '
    ';
        }
        return 0;
    }
    

    E

    从最外层,一层一层判断

    #include <bits/stdc++.h>
    #define all(n) (n).begin(), (n).end()
    #define se second
    #define fi first
    #define pb push_back
    #define mp make_pair
    #define sqr(n) (n)*(n)
    #define rep(i,a,b) for(int i=a;i<=b;++i)
    #define per(i,a,b) for(int i=a;i>=b;--i)
    using namespace std;
    typedef long long ll;
    typedef pair<int, int> PII;
    typedef vector<int> VI;
    typedef double db;
     
    const int N = 50 + 5;
     
    int n, m, _, k;
    char s[N][N];
     
    int main()
    {
        ios::sync_with_stdio(0); cin.tie(0);
        for (cin >> _; _; --_)
        {
            cin >> n; bool flag = 1;
            rep (i, 1, n) cin >> s[i] + 1;
     
            per (k, n, 1)
            {
                int h = n - k + 1;
                per (i, h, 1)
                    if (s[h][i] == '1' && !(h == n || i == n || s[h + 1][i] == '1' || s[h][i + 1] == '1'))
                    {
                        //cout << h << '!' << i << '
    ';
                        flag = 0;
                        break;
                    }
                
                per (i, h, 1)
                    if (s[i][h] == '1' && !(h == n || i == n || s[i + 1][h] == '1' || s[i][h + 1] == '1'))
                    {
                        //cout << s[i] << '
    ';
                        //cout << i << ' ' << h << '
    ';
                        flag = 0;
                        break;
                    }
     
                if (flag == 0) break;
            }
     
            if (flag == 0) cout << "NO
    ";
            else cout << "YES
    ";
        }
        return 0;
    }
    

    F

    dfs

    #include <bits/stdc++.h>
    #define all(n) (n).begin(), (n).end()
    #define se second
    #define fi first
    #define pb push_back
    #define mp make_pair
    #define sqr(n) (n)*(n)
    #define rep(i,a,b) for(int i=a;i<=b;++i)
    #define per(i,a,b) for(int i=a;i>=b;--i)
    using namespace std;
    typedef long long ll;
    typedef pair<int, int> PII;
    typedef vector<int> VI;
    typedef double db;
     
    const int N = 10 + 5;
     
    int n, m, _, k;
    char s[N][N], ans[N];
    int st[N];
     
    bool dfs(int k)
    {
        if (k == m + 1) return true;
     
        char c = '1'; int cur[N];
        rep(i, 1, n) cur[i] = st[i];
        rep(i, 1, n)
            if (s[i][k] != c)
            {
                c = ans[k] = s[i][k];
                bool flag = 1;
                rep(j, 1, n)
                {
                    if (s[j][k] != c) ++st[j];
                    if (st[j] > 1)
                    {
                        rep(p, 1, j) st[p] = cur[p];
                        flag = 0; break;
                    }
                }
     
                if (flag)
                {
                    if (dfs(k + 1)) return true;
                    rep(p, 1, n) st[p] = cur[p];
                }
            }
     
        return false;
    }
     
     
    int main()
    {
        ios::sync_with_stdio(0); cin.tie(0);
        for (cin >> _; _; --_)
        {
            cin >> n >> m;
            rep(i, 1, n) cin >> s[i] + 1;
            memset(st, 0, sizeof st);
     
            ans[m + 1] = '';
            if (dfs(1)) cout << ans + 1 << '
    ';
            else cout << -1 << '
    ';
        }
        return 0;
    }
    

    G

    dancing links 不会

    H

    先找到中位数, 然后左右移动中位数就行
    用set存一下删掉的数

    #define all(n) (n).begin(), (n).end()
    #define se second
    #define fi first
    #define pb push_back
    #define mp make_pair
    #define sqr(n) (n)*(n)
    #define rep(i,a,b) for(int i=a;i<=b;++i)
    #define per(i,a,b) for(int i=a;i>=b;--i)
    using namespace std;
    typedef long long ll;
    typedef pair<int, int> PII;
    typedef vector<int> VI;
    typedef double db;
     
    const int N = 60 + 5;
     
    int n, m, _, k;
    ll b[N];
    char s[N];
     
    int main()
    {
        ios::sync_with_stdio(0); cin.tie(0);
        b[0] = 1;
        rep (i, 1, 61) b[i] = b[i - 1] << 1;
        for (cin >> _; _; --_)
        {
            cin >> n >> m;
            ll ans = 1ll << (m - 1); --ans;
            ll x = ans, y = ans + 1;
     
            unordered_set<ll> mp;
            rep (i, 1, n)
            {
                cin >> s + 1;
                ll res = 0;
                for (int i = 0, j = m; j; --j, ++i)
                    if (s[j] == '1') res += b[i];
     
                mp.insert(res); 
                if (res == ans) 
                {
                    if (y)
                    {
                        ++ans, --y;
                        while (mp.count(ans)) ++ans;
                    }
                    else 
                    {
                        --ans, --x;
                        while (mp.count(ans)) --ans;
                    }
                }
                else if (res > ans) --y;
                else --x;
     
                while (x > y)
                {
                    --x, ++y; --ans;
                    while (mp.count(ans)) --ans; 
                }
                while (y > x + 1)
                {
                    --y, ++x, ++ans;
                    while (mp.count(ans)) ++ans;
                }
            }
            
            for (int i = m - 1, j = 1; j <= m; ++j, --i)
                if (ans >= b[i]) cout << 1, ans -= b[i];
                else cout << 0;
            cout << '
    ';
        }
        return 0;
    }
    
  • 相关阅读:
    LeetCode653. 两数之和 IV
    DFS
    DFS hdu 1016
    nyist 58 最小步数 BFS
    闭路电视监控系统
    闭路监控
    闭路电视
    恋爱的犀牛
    http://blog.163.com/db_teacher/blog/static/194540298201110723712407/
    2013=12=3 数据库实验七 数据控制实验(完整性部分)
  • 原文地址:https://www.cnblogs.com/2aptx4869/p/12953718.html
Copyright © 2011-2022 走看看