zoukankan      html  css  js  c++  java
  • 10-8 uva1262密码

    题意:有两个图,每一列都存在的字母选作密码,就第k大的密码

    思路:
    找出各个位置上的密码,

    假设:

    第1个字母只能是{A,C,D,W},

    第2个字母只能是{B,O,P},

    第3个字母只能是{G,M,O,X},

    第4个字母只能是{A,P},

    第5个字母只能是{G,S,U}。
    不管第1个字母是多少,后4个字母都有3*4*2*3=72种可能,因此当k≤72时,第1个字母
    是A,当72<k≤144时第1个字母是C,如此等等。再用同样的方法确定第2,3,4,5个字母即
    可。


    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #include <algorithm>
    #include <cmath>
    #include <map>
    #include <vector>
    using namespace std;
    typedef long long ll;
    typedef unsigned long long ull;
    
    char tmap[2][20][10];
    vector<char>mp[10];
    int vis[2][20][30];//第i个图,第j列的x字母
    
    int num[10];
    int main()
    {
        int T;
        scanf("%d",&T);
        while(T--)
        {
            int k;
            scanf("%d",&k);
            memset(vis,0,sizeof(vis));
            for(int j = 0; j < 2; j++)
                for(int i = 0; i < 6; i ++)
                    scanf("%s",tmap[j][i]);
            for(int i=0; i<5; ++i)
                for(int j=0; j<6; ++j)
                {
                    vis[0][i][tmap[0][j][i]-'A']=true;
                    vis[1][i][tmap[1][j][i]-'A']=true;
                }
            for(int i = 0;i < 5;i++)
                mp[i].clear();
            for(int i = 0;i < 5;i++)
            {
                for(int j = 0;j <= 26;j++)
                {
                    if( vis[0][i][j] && vis[1][i][j])
                        mp[i].push_back(j + 'A');
                }
            }
            num[5] = 1;
            for(int i = 4; i >= 0; i--)
            {
                num[i] = num[i+1] * (int)mp[i].size();
            }
            if(k > num[0])
                printf("NO
    ");
            else
            {
                k--;
                for(int i = 0; i < 5; i++)
                {
                    putchar(mp[i][k/num[i+1]]);
                    k %= num[i+1];
                }
                printf("
    ");
            }
        }
        return 0;
    }
    

      




  • 相关阅读:
    Flutter子组件调用父组件方法修改父组件参数
    Flutter点击两次返回键退出APP
    Flutter路由跳转父级页面向子页面传参及子页面向父级页面传参
    Flutter中用ListView嵌套GridView报错异常
    前端项目统一 ESlint 规则集
    前端规范
    手写防抖(Debouncing)和节流(Throttling)
    手写promise进阶版本
    实现一个call或 apply
    实现一个JSON.stringify()
  • 原文地址:https://www.cnblogs.com/Przz/p/5409716.html
Copyright © 2011-2022 走看看