密码游戏

Posted xiongchongwen

tags:

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

密码游戏 (password.cpp/c/pas)

【问题描述】

YJC 很喜欢玩游戏,今天他决定和朋友们玩密码游戏。 密码游戏的规则是这样的:初始时有两个大小为 m 的数组 a 和 b,分别是 0~m-1 的一 个排列。每一次操作在 0~m-1 之间选一个数 x,求出结果 y=b[a[x]],把 x 和 y 写下来。之 后,a 数组向前循环移动一次,即(a[0],a[1],...,a[m-2],a[m-1])变成(a[1],a[2],...,a[m-1],a[0])。 当 a 数组变回初始状态时,b 数组向前循环移动一次。现在知道所有的 x 和 y,如果 YJC 能 求出任意一组符合条件的 a 和 b 的初值,YJC 就赢了。 YJC 很想赢得游戏,但他太笨了,他想让你帮他算出 a 和 b 的初值。

【输入格式】

第一行包含两个整数 n 和 m,表示操作了多少次和 a、b 数组的大小。 第二行包含 n 个整数,第 i 个数表示第 i 次选出的 x。 第二行包含 n 个整数,第 i 个数表示第 i 次求出的 y。

【输出格式】

第一行包含 m 个整数,表示 a 的初值。 第二行包含 m 个整数,表示 b 的初值。如果有多组答案,输出任意一组即可。

【输入输出样例】

输入

4   2

0   0   0   0

0   1   1   0

输出

0   1

0   1

【数据说明】

对于 30%的数据,满足 m≤5,n≤1000。

对于 100%的数据,满足 2≤m≤26,m2≤n≤100000,保证数据随机,且存在至少一组 a 和 b。

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int a[30],b[30];
bool aa[30],bb[30];
int n,m,cnt,dx,dy;
int head[50];
int x[100005],y[100005];
bool key;
int re[30][30];
long long read(){
    long long a=0,b=1;
    char ch=getchar();
    while(ch<0||ch>9){
        ch=getchar();
    }
    if(ch==-){
        b=-1;
        ch=getchar();
    }
    while(ch>=0&&ch<=9){
        a=a*10+ch-0;
        ch=getchar();
    }
    return a*b;
}
void Print_res(){
    for (int i=0;i<m;i++){
        printf("%d ",a[i]);
    }
    printf("
");
    for (int i=0;i<m;i++){
        printf("%d ",b[i]);
    }
}
void dfs(int t){
    if(t==m){
        Print_res();
        key=1;
        return;
    }
    for(int k=0;k<m;k++){
        if(aa[k]){
            continue;
        }
        a[t]=k;
        bool ok=1;
        bool temp[30]={0};
        for(int e=0;e<m;e++){
            if(re[t][e]==-1){
                continue;
            }
            int v=(a[t]+e)%m;
            int val=re[t][e];
            if((b[v]==-1&&bb[val]==0)||b[v]==val);
            else{
                ok=0;
                break;
            }
        }
        if(ok==0){
            continue;
        }
        aa[k]=1;
        for (int e=0;e<m;e++){
            if(re[t][e]==-1){
                continue;
            }
            int v=(a[t]+e)%m;
            int val=re[t][e];
            if(b[v]==-1){
                b[v]=val;
                bb[val]=1;
                temp[v]=1;
            }
        }
        dfs(t+1);
        if(key){
            return;
        }
        for (int i=0;i<m;i++){
            if (temp[i]){
                bb[b[i]]=0;
                b[i]=-1;
            }
        }
        aa[k]=0;
    }
}
int main(){
    freopen("password.in","r",stdin);
    freopen("password.out","w",stdout);
    n=read(),m=read();
    for(int i=1;i<=n;i++){
        x[i]=read();
    }
    for(int i=1;i<=n;i++){
        y[i]=read();
    }
    for(int i=0;i<m;i++){
        a[i]=b[i]=-1;
    }
    memset(re,-1,sizeof(re));
    while(cnt<n){
        cnt++;
        re[(x[cnt]+dx)%m][dy]=y[cnt];
        dx++;
        if(dx==m){
            dx=0,dy++;
        }
        if(dy==m){
            dy=0;
        }
    }
    dfs(0);
    return 0;
}

 

技术图片

技术图片

解题思路:

技术图片

技术图片

以上是关于密码游戏的主要内容,如果未能解决你的问题,请参考以下文章

「游戏引擎 浅入浅出」4.3 片段着色器

「游戏引擎 浅入浅出」4.3 片段着色器

「游戏引擎 浅入浅出」4.3 片段着色器

修改MySQL密码报错“ERROR 1819 (HY000): Your password does not satisfy the current policy requirements“(代码片段

微信小程序代码片段

通过游戏学python 3.6 第一季 第九章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账