栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

zoj 1036 Enigma 2

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

zoj 1036 Enigma 2

#include <cstdio>#include <cmath>#include <cstring>#include <string>#include <map>#include <vector>#include <iostream>#include <algorithm>#define moo 1000000007//10^9+7#define PI acos(-1.0)using namespace std;char s[10][100];int a[10][100];struct question{    int x;    int y;}que[5];int cou;int cheek(){    int b1[100];    int b2[100];    int len=strlen(s[7]);    for(int i=0;i<len;i++)    {        b1[i]=a[4][a[7][i]];        b2[i]=a[6][i];    }    int d[4][30];    int e[4][30];    for(int i=0;i<4;i++)    {        for(int j=0;j<26;j++)        { int t=a[i][j]; d[i][j]=t-j; e[i][t]=j-t;        }    }    int c[4];    for(int i=0;i<4;i++)        c[i]=a[5][i];    for(int i=0;i<len;i++)    {        for(int j=0;j<=3;j++)        { b1[i]+=d[j][(b1[i]+c[j]+26)%26]; b1[i]=(b1[i]+26)%26;        }        for(int j=2;j>=0;j--)        { b1[i]+=e[j][(b1[i]+c[j]+26)%26]; b1[i]=(b1[i]+26)%26;        }        for(int j=0;j<26;j++) if(b1[i]==a[4][j]&&b2[i]!=j)     return 0;        c[0]++;        if(c[0]==a[5][0]+26)        { c[0]=a[5][0]; c[1]++; if(c[1]==a[5][1]+26) {     c[1]=a[5][1];     c[2]++;     if(c[2]==a[5][2]+26)     {         c[2]=a[5][2];         c[3]++;         if(c[3]==a[5][3]+26)  c[3]=a[5][3];     } }        }    }    return 1;}int dfs(int x){    if(x==cou)    {        if(cheek()==1) return 1;        return 0;    }    for(int i=0;i<26;i++)    {        a[que[x+1].x][que[x+1].y]=i;        if(dfs(x+1)==1) return 1;    }    return 0;}void init(){    for(int i=0;i<8;i++)    {        int len=strlen(s[i]);        for(int j=0;j<len;j++)        { if(s[i][j]=='?') {     cou++;     que[cou].x=i;     que[cou].y=j; } else     a[i][j]=s[i][j]-'a';        }    }}int main(){    int T;    cin>>T;    int dd=T;    while(T--)    {        for(int i=0;i<8;i++) scanf("%s",s[i]);        cou=0;        init();        dfs(0);        printf("Scenario #%d:n",dd-T);        int len=strlen(s[6]);        for(int i=0;i<len;i++) printf("%c",a[6][i]+'a');        printf("nn");    }    return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/375585.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号