the beginning of_The king

the beginning of_The kingThe 2016 Asia Regional Contest, Tsukuba Quality of Check Digits Gym – 101158B

大家好,又见面了,我是你们的朋友全栈君。

题意:某城市公民每个人有一个五位数的id,前四位是basic id,最后一位是校验位,校验位是根据样例给出的表格得到的,设某公民的id为abcde,那么e=((((0$a)$b)$c)$d),每个公民都可能犯错误,例如将一位数字写错或者将相邻的两位调换,于是我们优秀的表格是应该可以判断出错的情况的,我们知道对于正确的id,(((((0$a)$b)$c)$d)$e)=0,但是等于0的不一定都是正确的,不等于0的一定是错误的,我们要求的是对于四位的basic id我们不能检验出来这个是否是正确的id的数量,也就是只要这个id出错的情况可能会被判正确,那么就是不可以的,ans就要加加

做法:直接模拟

坑点:例如1233 33调换之后与原来的值返回值也是一样的,这样即使一样也不能成为不能判断是否正确,因为33调换也是原来的值,这里特殊考虑就可以了。

代码如下:

#include<stdio.h>
#include<iostream>
#include<string.h>
#include<algorithm>

using namespace std;

int mp[10][10];
int num[10];
int ans;
//int vis[10];

int solve_1()
{
    int res = 0;
    for(int i=0; i<4; i++)
    {
        res = mp[res][num[i]];
    }
    return res;
}

int solve()
{
    int res = 0;
    for(int i=0; i<=4; i++)
    {
        res = mp[res][num[i]];
    }
    return res;
}

bool ok()
{
//    memset(vis , 0 , sizeof(vis));
    int ttmp;
    for(int i=0; i<5; i++)
    {
        ttmp = num[i];
        for(int j=0; j<10; j++)
        {
            if(j==ttmp) continue;
            num[i] = j;
            if(solve()==0)
                return false;
        }
        num[i] =ttmp;
    }
    if(num[0] != num[1])
    {
        swap(num[0], num[1]);
        if(solve()==0)
            return false;
        swap(num[0], num[1]);
    }
    if(num[1] != num[2])
    {
        swap(num[1], num[2]);
        if(solve()==0)
            return false;
        swap(num[1], num[2]);
    }
    if(num[2] != num[3])
    {
        swap(num[2], num[3]);
        if(solve()==0)
            return false;
        swap(num[2], num[3]);
    }
    if(num[3] != num[4])
    {
        swap(num[3], num[4]);
        if(solve()==0)
            return false;
    }
    return true;
}

int main()
{
    ans = 0;
    for(int i=0; i<10; i++)
        for(int j=0; j<10; j++)
            scanf("%d", &mp[i][j]);
    for(int i=0; i<10; i++)
    {
        for(int j=0; j<10; j++)
        {
            for(int p=0; p<10; p++)
            {
                for(int q=0; q<10; q++)
                {
                    num[0] = i;
                    num[1] = j;
                    num[2] = p;
                    num[3] = q;
                    num[4] = solve_1();
                    if( !ok() )
                    {
                        ans++;
//                        printf("%d %d %d %d %d \n", num[0], num[1], num[2], num[3], num[4]);
                    }
                }
            }
        }
    }
    printf("%d\n", ans);


    return 0;
}

 

转载于:https://www.cnblogs.com/Flower-Z/p/9787366.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107254.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 2022,VSCode 前端插件推荐(摸鱼必备)

    2022,VSCode 前端插件推荐(摸鱼必备)点击上方“蓝色字体”,选择“设为星标”做积极向上的前端人!前言推荐一波前端开发必备插件,绝对可以提高你的生产力,剩下来的时间来mo鱼,岂不美哉开发综合推荐别名路径跳转插件名:别名路径跳转使用说明:别名路径跳转插件,支持任何项目,使用场景:当你在开发页面时,想点击别名路径导入的组件时(演示如下)配置说明下载后只需自定义配置一些自己常用的别名路径即可//文件名别名…

    2022年7月25日
    40
  • 【kali】kali设置burpsuite抓包dvwa

    【kali】kali设置burpsuite抓包dvwakali自带burpsuite配置代理burpsuite是通过代理来抓包dvwa的burpsuite:proxy—>options里边监听的应该是127.0.0.1:8080(端口ip如果撞车了都可以自己改)火狐:preferences–>最下边的networksettings点击settings—>从usesysyemproxy改成manualproxyhttp:127.0.0.1port:8080(和burpsuite设置的一样就ok),勾选上u

    2022年6月4日
    85
  • 分析了10万条B站UP主数据后,我知道了成为百万粉丝UP主的一些秘密「建议收藏」

    分析了10万条B站UP主数据后,我知道了成为百万粉丝UP主的一些秘密「建议收藏」前几天一位好朋友入了B站,问我如何才能成为一名百万粉丝的up主。这不,于是我做了这篇的一些分析,知道了成为百万粉丝up主的一些小秘密。还做了一个昵称生成器,给其昵称起名提供建议。这是她的b站视频截图:关于昵称起名我的想法是这样,是我们把B站这些百万粉丝大佬的昵称分析一下成分构成,根据相关性随机起个名,是不是就有百万粉丝up主昵称的那味了?上面截图是她改名前的昵称,是否会改名,改名后叫什么咱们拭目以待。咱们现在就开始爬取整整:B站up主信息爬取直接通过b站首页去爬是很不方便的,这里我找到了两个第

    2022年6月12日
    47
  • 使用pycharm中全文搜索快捷键(整个项目搜索)[通俗易懂]

    使用pycharm中全文搜索快捷键(整个项目搜索)[通俗易懂]Ctrl+Shift+F或者在关闭所有的文件后在主页面,连续按两次shift 

    2022年8月28日
    4
  • 监督学习、无监督学习、半监督学习、强化学习、自监督学习

    监督学习、无监督学习、半监督学习、强化学习、自监督学习一文读懂监督学习、无监督学习、半监督学习、强化学习四种方式 青烟王国 图:pixabay「机器人圈」导览:一般说来,训练深度学习网络的方式主要有四种:监督、无监督、半监督和强化学习。在接下来的文章中,机器人圈将逐个解释这些方法背后所蕴含的理论知识。除此之外,机器人圈将分享文献中经常碰到的术语,并提供与数学相关的更多资源。本文编译自硅谷著名的风险投资机构安德森霍洛维茨基金,作…

    2022年9月14日
    0
  • 用excel求逆矩阵只出现一个数字_求逆矩阵的方法公式

    用excel求逆矩阵只出现一个数字_求逆矩阵的方法公式 因为在YUV与RGB互相转换的时候用到了矩阵运算,当时正好需要求逆矩阵,而手头上没有matlab,所以只能考虑excel了。终于让我找到了方法,共享之:1)先将矩阵的数据输入,然后将所输入的数据选中(注意:只能是N*N的矩阵),然后点击插入-名称-定义,给这个矩阵取个名字MatrixA,然后点击确定。2)再选择N*N个格,在上面的输入框内写入“=MINVERSE(MatrixA)”,

    2022年8月21日
    12

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号