The 2016 Asia Regional Contest, Tsukuba Quality of Check Digits Gym - 101158B

來源:互聯網
上載者:User

標籤:include   pre   code   bcd   錯誤   printf   check   坑點   nal   

題意:某城市公民每個人有一個五位元的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;}

 

The 2016 Asia Regional Contest, Tsukuba Quality of Check Digits Gym - 101158B

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.