模拟(进制)

Posted nonames

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模拟(进制)相关的知识,希望对你有一定的参考价值。

https://acm.ecnu.edu.cn/contest/231/problem/A/

题意:给你长度为n的单词,其中有m个是#表示不确定字母,每个#有k个候选字母,将所有可以单词按字典序排序,问第x个单词是?

解法:模拟进制顺序。

//#include <bits/stdc++.h>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <iostream>
#include <string>
#include <stdio.h>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <string.h>
#include<time.h>
#include <vector>
#define ME(x , y) memset(x , y , sizeof(x))
#define SF(n) scanf("%d" , &n)
#define rep(i , n) for(int i = 0 ; i < n ; i ++)
#define INF  0x3f3f63f3f
#define mod 20191117
#define PI acos(-1)
using namespace std;
typedef long long ll ;
ll n , m , k , x ;
char s[500009];
int a[500009];
char str[500009];
char b[500009];

void turn(ll x)
{
    int l = 0 ;
    while(x)
    {
        a[l++] = x % k ;
        x /= k ;
    }
}

int main()
{
    /*#ifdef ONLINE_JUDGE
    #else
        freopen("D:/c++/in.txt", "r", stdin);
        freopen("D:/c++/out.txt", "w", stdout);
    #endif*/
    int flag = 0 ;
    scanf("%lld%lld%lld%lld" , &n , &m , &k ,&x);
    scanf("%s" , s);
    int len = strlen(s);
    x -- ;//使顺序与进制数组对应起来
    turn(x);
    int l = 0 ;
    for(int i = 0 ; i < m / 2; i++)//调整进制顺序
    {
        int t ;
        t = a[m - i - 1];
        a[m-i-1] = a[i];
        a[i] = t ;
    }
    for(int i = 0 ; i < m ; i++)
    {
        scanf("%s" , str);
        sort(str , str+k);
        b[l++] = str[a[i]];
    }
    l = 0 ;
    for(int i = 0 ; i < n ; i++)
    {
        if(s[i] == ‘#‘)
        {
            s[i] = b[l++];
        }
    }
    printf("%s
" , s);



    return 0;
}

 

以上是关于模拟(进制)的主要内容,如果未能解决你的问题,请参考以下文章

当我切换到包含片段的活动时应用程序崩溃(二进制 XML 文件第 10 行:二进制 XML 文件第 10 行:膨胀类片段时出错)

c_cpp C片段将十进制转换为二进制

二进制 XML 文件第 13 行:膨胀类片段时出错

第 7 行的 InflateException 二进制 XML 文件:膨胀类片段时出错

Android - 使用活动和片段导航 - 二进制 XML 文件错误

android.view.inflateexception 二进制 xml 文件第 7 行错误膨胀类片段