zoukankan      html  css  js  c++  java
  • Codeforces Round #444 (Div. 2) B. Cubes for Masha dfs

    QAQ心态崩了……这个题=-=有毒……理解的时候出了点小问题orz(○| ̄|_)

    题意大概是输出从1开始可以连续表示的数的最后一个数(n个魔方表示一个数的时候不能重复使用)

    注意:0不是一定要有的……从1开始判断就可以了

    (因为一开始判断了有没有0……gg了……一直WA)

    emmmm这里贴两份代码好了,一份是模拟,另一份……暴力dfs!(看到别人代码才发现原来还可以这样写,代码简洁了好多,开心!o(* ̄▽ ̄*)ブ)

    dfs:

    #include<string>
    #include<iostream>
    using namespace std;
    int c[5][15];
    bool vis[1005], b[5];
    int n, a;
    void dfs(int p,int s)
    {
        vis[s] = 1;    //可以表示数s,emmmm,0就不用管了
        if (p >= n) return; //所用魔方的个数
        for (int i = 1; i <= n; i++)
        {
            if (b[i])continue;  
            for (int j = 0; j < 6; j++)
            {
                b[i] = 1;   //第i个魔方已用过
                dfs(p + 1, s * 10 + c[i][j]);
                b[i] = 0;   //回溯
            }
        }
    }
    int main()
    {
        cin >> n;
        for (int i = 1; i <= n; i++)
            for (int j = 0; j < 6; j++)
                cin >> c[i][j];
        memset(vis, 0, sizeof(vis));
        memset(b, 0, sizeof(b));
        dfs(0, 0);
        int i;
        for (i = 1; i < 1000; i++)
            if (!vis[i]) break;
        cout << i - 1 << endl;
        return 0;
    }

    模拟:

    #include<string>    //orz这就叫,智商不够代码来凑……(○| ̄|_ )
    #include<iostream>
    using namespace std;
    bool c[5][15];
    int n, a;
    int main()
    {
        cin >> n;
        memset(c, 0, sizeof(c));
        for (int i = 1; i <= n; i++)
            for (int j = 0; j < 6; j++)
            {
                cin >> a;
                c[i][a] = 1;
            }
        if (n == 1)
        {
            for (int i = 1; i < 10; i++)
            {
                if (!c[1][i])
                {
                    cout << i - 1 << endl;
                    return 0;
                }
            }
        }
        if (n == 2)
        {
            for (int i = 1; i < 10; i++)
            {
                int flag = 0;
                if (c[1][i] || c[2][i])
                    flag = 1;
                if (!flag)
                {
                    cout << i - 1 << endl;
                    return 0;
                }
            }
            for (int i = 10; i < 100; i++)
            {
                int flag = 0;
                a = i / 10;
                int b = i % 10;
                if (c[1][a] && c[2][b]) flag = 1;
                if (c[1][b] && c[2][a])flag = 1;
                if (!flag)
                {
                    cout << i - 1 << endl;
                    return 0;
                }
            }
        }
        if (n == 3)
        {
            for (int i = 1; i < 10; i++)
            {
                if (!c[1][i] && !c[2][i] && !c[3][i])
                {
                    cout << i - 1 << endl;
                    return 0;
                }
            }
            for (int i = 10; i < 100; i++)
            {
                int flag = 0;
                a = i / 10;
                int b = i % 10;
                if (c[1][a] && c[2][b]) flag = 1;
                else if (c[1][b] && c[2][a])flag = 1;
                else if (c[1][a] && c[3][b]) flag = 1;
                else if (c[1][b] && c[3][a])flag = 1;
                else if (c[2][a] && c[3][b]) flag = 1;
                else if (c[2][b] && c[3][a])flag = 1;
                if (!flag)
                {
                    cout << i - 1 << endl;
                    return 0;
                }
            }
        }
    }
  • 相关阅读:
    PowerDesigner15在win7-64位系统下对MySQL反向工程
    像竹子一样有节操
    spring 注解
    如何实现在已有代码之后添加逻辑之java动态代理
    如何实现在已有代码之后添加逻辑之继承,组合(静态代理)实现方法
    MySql按周,按月,按日分组统计数据
    SpringBoot 获取前端传递Json的几种方法
    Spring boot 基础整理(一)
    layui常用插件(二) 时间插件
    layui常用插件(一) 轮播图
  • 原文地址:https://www.cnblogs.com/Egoist-/p/7784673.html
Copyright © 2011-2022 走看看