zoukankan      html  css  js  c++  java
  • Petrozavodsk Winter Camp, Day 8, 2014, Mosaic

    给你三个数字a,b,c,让你用1~m的数字凑出来

    结论:有2个1和2个2肯定凑不出来,然后就搜索

    #include <bits/stdc++.h>
    using namespace std;
    #define rep(i, j, k) for (int i = int(j); i <= int(k); ++ i) 
    #define dwn(i, j, k) for (int i = int(j); i >= int(k); -- i)
    typedef long long LL;
    typedef pair<int, int> P;
    const int N = 3e5 + 7;
    char col[N];
    int dfs(int i, int j, int k, int x) {
        if (i == 0 && j == 0 && k == 0) return 1;
        if (i < 0 || j < 0 || k < 0 || x <= 0) return 0;
        col[x] = 1;
        if (dfs(i - x, j, k, x - 1)) return 1;
        col[x] = 2;
        if (dfs(i, j - x, k, x - 1)) return 1;
        col[x] = 3;
        if (dfs(i, j, k - x, x - 1)) return 1;
        return 0;
    }
    int main() {
        ios::sync_with_stdio(0);
        LL a, b, c;
        cin >> a >> b >> c;
        LL n = a + b + c;
        LL x = 1;
        for (x = 1; n > 0; x ++) n -= x; x --; int xx = x;
        int c1 = (a == 1) + (b == 1) + (c == 1);
        int c2 = (a == 2) + (b == 2) + (c == 2);
        if (c1 >= 2 || c2 >= 2 || n != 0) {
            printf("Impossible
    ");
            return 0;
        }
        dfs(a, b, c, x);
        // cout << a << ' ' << b << ' ' << c << ' ' << x << '
    ';
        auto tran = [&](int x) -> char {
            if (x == 1) return 'W';
            if (x == 2) return 'G';
            return 'B';
        };
        rep(i, 1, xx) printf("%c", tran(col[i]));
    }
    /*
    11 5 5
    */
  • 相关阅读:
    微信公众号 sign类
    serlvet HttpServletRequest
    servlet setCharacterEncoding setHeader 设置字符区别
    java 读取word
    java 使用Java生成word文档
    java io 读取写文件
    异步Promise及Async/Await可能最完整入门攻略
    React和Vue组件间数据传递demo
    Vue基础指令集锦
    vue 关于数组和对象的更新
  • 原文地址:https://www.cnblogs.com/tempestT/p/10661076.html
Copyright © 2011-2022 走看看