ZOJ 3314 CAPTCHA 模拟

这篇博客主要介绍了如何解决ZOJ 3314题目的CAPTCHA模拟问题,内容涉及复杂的算法和逻辑处理,对提高编程技巧具有一定的挑战性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

没什么好说的,很麻烦的模拟而已

//#pragma comment(linker, "/STACK:102400000,102400000")
#include<cstdio>
#include<cstring>
#include<vector>
#include<queue>
#include<cmath>
#include<cctype>
#include<string>
#include<algorithm>
#include<iostream>
#include<ctime>
#include<map>
#include<set>
using namespace std;
#define MP(x,y) make_pair((x),(y))
#define PB(x) push_back(x)
//typedef __int64 LL;
//typedef unsigned __int64 ULL;
/* ****************** */
const int INF=100011122;
const double INFF=1e100;
const double eps=1e-8;
const int mod=1000000007;
const int NN=210;
const int MM=5000010;
/* ****************** */

char zi[26][7][17]={
//a
{
{"111111MMM1111111"},
{"11111MM1MM111111"},
{"1111MM111MM11111"},
{"111MMMMMMMMM1111"},
{"11MM1111111MM111"},
{"1MMM11111111MM11"},
{"1MM1111111111MM1"}
},
//b
{
{"1MMMMMMMMMMM1111"},
{"1MM11111111MM111"},
{"1MM11111111MM111"},
{"1MMMMMMMMMMM1111"},
{"1MM11111111MM111"},
{"1MM11111111MM111"},
{"1MMMMMMMMMMM1111"}
},
//c
{
{"11111MMMMMMMM111"},
{"111MM1111111MM11"},
{"11MM111111111MM1"},
{"11MM111111111111"},
{"11MM111111111MM1"},
{"111MM1111111MM11"},
{"11111MMMMMMMM111"}
},
//d
{
{"1MMMMMMMMMMM1111"},
{"1MM111111111MM11"},
{"1MM1111111111MM1"},
{"1MM1111111111MM1"},
{"1MM1111111111MM1"},
{"1MM111111111MM11"},
{"1MMMMMMMMMMM1111"}
},
//e
{
{"1MMMMMMMMMMMM111"},
{"1MM1111111111111"},
{"1MM1111111111111"},
{"1MMMMMMMMMMMM111"},
{"1MM1111111111111"},
{"1MM1111111111111"},
{"1MMMMMMMMMMMM111"}
},
//f
{
{"1MMMMMMMMMMMMM11"},
{"1MM1111111111111"},
{"1MM1111111111111"},
{"1MMMMMMMMMMMMM11"},
{"1MM1111111111111"},
{"1MM1111111111111"},
{"1MM1111111111111"}
},


//g
{
{"11111MMMMMMMM111"},
{"111MM1111111MM11"},
{"11MM111111111MM1"},
{"11MM111111111111"},
{"11MM111111MMMMM1"},
{"111MM1111111MM11"},
{"11111MMMMMMMMM11"}
},
//h
{
{"1MM111111111MM11"},
{"1MM111111111MM11"},
{"1MM111111111MM11"},
{"1MMMMMMMMMMMMM11"},
{"1MM111111111MM11"},
{"1MM111111111MM11"},
{"1MM111111111MM11"}
},
//i
{
{"11111MMMMMM11111"},
{"1111111MM1111111"},
{"1111111MM1111111"},
{"1111111MM1111111"},
{"1111111MM1111111"},
{"1111111MM1111111"},
{"11111MMMMMM11111"}
},
//j
{
{"1111MMMMMMMM1111"},
{"1111111MM1111111"},
{"1111111MM1111111"},
{"1111111MM1111111"},
{"111MM11MM1111111"},
{"111MMM1MM1111111"},
{"11111MMMM1111111"}
},
//k
{
{"11MM111111MMM111"},
{"11MM11111MMM1111"},
{"11MM111MMM111111"},
{"11MMMMM111111111"},
{"11MM111MMM111111"},
{"11MM11111MMM1111"},
{"11MM111111MMMM11"}
},
//l
{
{"11MM111111111111"},
{"11MM111111111111"},
{"11MM111111111111"},
{"11MM111111111111"},
{"11MM111111111111"},
{"11MM111111111111"},
{"11MMMMMMMMMMMM11"}
},


//m
{
{"1MM1111111111MM1"},
{"1MMMM111111MMMM1"},
{"1MM1MM1111MM1MM1"},
{"1MM11MMMMM111MM1"},
{"1MM1111M11111MM1"},
{"1MM1111111111MM1"},
{"1MM1111111111MM1"}
},
//n
{
{"1MMM111111111MM1"},
{"1MMMM11111111MM1"},
{"1MM1MM1111111MM1"},
{"1MM11MM111111MM1"},
{"1MM1111MM1111MM1"},
{"1MM111111MMM1MM1"},
{"1MM11111111MMMM1"}
},
//o
{
{"11111MMMMMM11111"},
{"111MMM1111MMM111"},
{"11MMM111111MMM11"},
{"1MM1111111111MM1"},
{"11MMM111111MMM11"},
{"111MMM1111MMM111"},
{"11111MMMMMM11111"}
},
//p
{
{"1MMMMMMMMMMM1111"},
{"1MM111111111MM11"},
{"1MM1111111111MM1"},
{"1MM111111111MM11"},
{"1MMMMMMMMMMM1111"},
{"1MM1111111111111"},
{"1MM1111111111111"}
},
//q
{
{"11111MMMMMM11111"},
{"111MMM1111MMM111"},
{"11MMM111111MMM11"},
{"1MM1111111111MM1"},
{"11MMM1MMMM1MMM11"},
{"111MMM11MMMMM111"},
{"111111MMMM1MMMM1"}
},
//r
{
{"1MMMMMMMMMMM1111"},
{"1MM111111111MM11"},
{"1MM1111111111MM1"},
{"1MM111111111MM11"},
{"1MMMMMMMMMMM1111"},
{"1MM11111111MM111"},
{"1MM111111111MMM1"}
},
//s
{
{"1111MMMMMMMM1111"},
{"111MM1111111MM11"},
{"11MMM1111111MMM1"},
{"1111MMMMM1111111"},
{"1MMM111MMMM11111"},
{"111MMM11111MMM11"},
{"11111MMMMMMM1111"}
},
//t
{
{"11MMMMMMMMMMMM11"},
{"11MMMMMMMMMMMM11"},
{"1111111MM1111111"},
{"1111111MM1111111"},
{"1111111MM1111111"},
{"1111111MM1111111"},
{"1111111MM1111111"}
},
//u
{
{"1MM1111111111MM1"},
{"1MM1111111111MM1"},
{"1MM1111111111MM1"},
{"1MM1111111111MM1"},
{"1MMM11111111MMM1"},
{"1MMM11111111MMM1"},
{"111MMMMMMMMMM111"}
},
//v
{
{"1MMMM111111MMMM1"},
{"11MMM111111MMM11"},
{"11MMM111111MMM11"},
{"111MMM1111MMM111"},
{"1111MMM11MMM1111"},
{"11111MM11MM11111"},
{"111111MMMM111111"}
},
//w
{
{"1MM1111111111MM1"},
{"1MM1111111111MM1"},
{"11MM111MM111MM11"},
{"11MM111MM111MM11"},
{"11MM111MM111MM11"},
{"11MM1MM11MM1MM11"},
{"111MMM1111MMM111"}
},
//x
{
{"11MMM111111MMM11"},
{"111MMM1111MMM111"},
{"1111MMM11MMM1111"},
{"111111MMMM111111"},
{"1111MMM11MMM1111"},
{"111MMM1111MMM111"},
{"11MMM111111MMM11"}
},
//y
{
{"11MMM111111MMM11"},
{"111MMM1111MMM111"},
{"1111MMM11MMM1111"},
{"111111MMMM111111"},
{"1111111MM1111111"},
{"1111111MM1111111"},
{"1111111MM1111111"}
},
//z
{
{"111MMMMMMMMMM111"},
{"1111111111MM1111"},
{"111111111MM11111"},
{"11111111MM111111"},
{"111111MM11111111"},
{"11111MM111111111"},
{"111MMMMMMMMMMM11"}
}
};
//7*16

char mat[405][405];
bool vis[26];
int dir[8][2]={
{1,0},
{-1,0},
{0,1},
{0,-1},
{1,1},
{-1,1},
{1,-1},
{-1,-1}
};

bool ok(int k,int i,int j,int x,int y,int d)
{
    if(zi[k][i][j]!='M')
        return true;
    int kk,ti,tj,tx,ty;
    for(kk=0;kk<8;kk++)
    {
        ti = i + dir[kk][0];
        tj = j + dir[kk][1];
        tx = x + dir[kk][0]*d;
        ty = y + dir[kk][1]*d;

        if(ti<0 || ti>=7)
            continue;
        if(tj<0 || tj>=16)
            continue;

        if(zi[k][ti][tj]!=mat[tx][ty])
            return false;
    }
    return true;
}

void solve(int x,int y)
{
    int i,j,k;
    bool fg;
    for(k=0;k<26;k++)
    {
        fg = true;
        for(i=0;i<7&&fg;i++)
            for(j=0;j<16;j++)
            {
                if( !ok(k,i,j,x+i,y+j,1) )
                {
                    fg = false;
                    break;
                }
            }
        if(fg)
            vis[k]=true;
            
        //fan!!!
        fg = true;
        for(i=0;i<7&&fg;i++)
            for(j=0;j<16;j++)
            {
                if( !ok(k,i,j,x+6-i,y+15-j,-1) )
                {
                    fg = false;
                    break;
                }
            }
        if(fg)
            vis[k]=true;
    }
}

int main()
{
    int n,m,i,j;
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        for(i=0;i<=n+3;i++)
            for(j=0;j<=m+9;j++)
                mat[i][j] = '1';

        for(i=2;i<=n+1;i++)
        {
            scanf("%s",mat[i]+5);
        }
        memset(vis,false,sizeof(vis));
        for(i=0;i+6<=n+3;i++)
            for(j=0;j+15<=m+9;j++)
            {
                if(mat[i][j]!='M')
                    solve(i,j);
            }

        for(i=0;i<26;i++)
            if(vis[i])
                printf("%c",i+'A');
        puts("");
    }

    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值