zoukankan      html  css  js  c++  java
  • The 2019 China Collegiate Programming Contest Harbin Site F. Fixing Banners

    链接:

    https://codeforces.com/gym/102394/problem/F

    题意:

    Harbin, whose name was originally a Manchu word meaning "a place for drying fishing nets", grew from a small rural settlement on the Songhua River to become one of the largest cities in Northeast China. Founded in 1898 with the coming of the Chinese Eastern Railway, the city first prospered as a region inhabited by an overwhelming majority of the immigrants from the Russian Empire. Now, Harbin is the capital of Heilongjiang province and the largest city in the northeastern region of the People's Republic of China. It serves as a key political, economic, scientific, cultural, and communications hub in Northeast China, as well as an important industrial base of the nation.

    This year, a CCPC regional contest is going to be held in this wonderful city, hosted by Northeast Forestry University. To ensure the contest will be a success and enjoyed by programmers around the country, preparations for the event are well underway months before the contest.

    You are the leader of a student volunteer group in charge of making banners to decorate the campus during the event. Unfortunately, your group made a mistake and misprinted one of the banners. To be precise, the word "harbin" is missing in that banner. Because you don't have time to reprint it, the only way to fix it is to cut letters from some used old banners and paste them onto the misprinted banner. You have exactly six banners, and for some reason, you must cut exactly one letter from each banner. Then, you can arrange and paste the six letters onto the misprinted banner and try to make the missing word "harbin". However, before you start cutting, you decide to write a program to see if this is possible at all.

    思路:

    记录每个串的可用字符, DFS。

    代码:

    #include<bits/stdc++.h>
    using namespace std;
     
    const int MAXN = 2e6+10;
     
    char s[6][MAXN];
    int Vis[6][7];
    int Use[7];
    map<char, int> Mp;
     
    bool Dfs(int step)
    {
        //cout << step << endl;
        if (step == 7)
            return true;
        for (int i = 0;i < 6;i++)
        {
            if (Use[i] == 1 || Vis[i][step] == 0)
                continue;
            Use[i] = 1;
            if (Dfs(step+1))
                return true;
            Use[i] = 0;
        }
        return false;
    }
     
    int main()
    {
        Mp['h'] = 1;
        Mp['a'] = 2;
        Mp['r'] = 3;
        Mp['b'] = 4;
        Mp['i'] = 5;
        Mp['n'] = 6;
        int t;
        scanf("%d", &t);
        while(t--)
        {
            memset(Use, 0, sizeof(Use));
            memset(Vis, 0, sizeof(Vis));
            for (int i = 0;i < 6;i++)
                scanf("%s", s[i]);
            for (int i = 0;i < 6;i++)
            {
                int len = strlen(s[i]);
                for (int j = 0;j < len;j++)
                {
                    if (Mp[s[i][j]] == 0)
                        continue;
                    Vis[i][Mp[s[i][j]]] = 1;
                }
            }
            /*
            for (int i = 0;i < 6;i++)
            {
                for (int j = 1;j <= 6;j++)
                    cout << Vis[i][j] << ' ';
                cout << endl;
            }
            */
            if (Dfs(1))
                puts("Yes");
            else
                puts("No");
        }
     
        return 0;
    }
    
  • 相关阅读:
    LeetCode 82,考察你的基本功,在有序链表中删除重复元素II
    golang | Go语言入门教程——结构体初始化与继承
    pandas | 使用pandas进行数据处理——DataFrame篇
    博弈论 | 详解搞定组合博弈问题的SG函数
    PCA算法 | 数据集特征数量太多怎么办?用这个算法对它降维打击!
    Python | 面试必问,线程与进程的区别,Python中如何创建多线程?
    Pytorch | 详解Pytorch科学计算包——Tensor
    通过Windows Visual Studio远程调试WSL2中的.NET Core Linux应用程序
    MSIL入门(二)通过对象看IL
    MSIL入门(一)C#代码与IL代码对比
  • 原文地址:https://www.cnblogs.com/YDDDD/p/11797741.html
Copyright © 2011-2022 走看看