CFGym 101158B(巨坑题)

Posted

tags:

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

前言:无话可说,看懂题意就没什么难度了。

题意:对于[0, 9999]区间内的每一个数b,通过输入的转换表,得到一个e值,把这个值添加到b的后面,得到一个五位数c。对于c的每一位,从0枚举到9,得到50个数。然后,对c的相邻数位两两交换,得到4个数,总共54个数。然后,对于[0, 9999]区间内的每一个数b,在它的54个数中,如果存在一个数(和c不想等),它的check值等于0,那么,这个数b是要被计数的,计数器加1。最后输出计数器的值就OK了。至于其他什么"good","correct",“one or more common errors"之类的,都是绕人的,不用管。T_T我就是被这些字眼坑了,以至于这个题看了几个小时也没完全弄明白。T_T诶,这说白了也是在为自己实力弱找理由。

源代码:

#include<bits/stdc++.h>
using namespace std;
int tab[10][10];
int init[10000];
char alt[10000][55][8];
int tmp[5];
int gete(int x) {
    for(int i = 0; i < 4; ++i)tmp[i] = x % 10, x /= 10;
    int res = 0;
    for(int i = 3; i >= 0; --i)res = tab[res][tmp[i]];
    return res;
}

void tochar(char* str, int x) {
    for(int i = 0; i < 5; ++i)tmp[i] = x % 10, x /= 10;
    for(int i = 4; i >= 0; --i)str[4 - i] = tmp[i] + 0;
}

int check(char* str) {
    for(int i = 0; i < 5; ++i)tmp[4 - i] = str[i] - 0;
    int res = 0;
    for(int i = 4; i >= 0; --i)res = tab[res][tmp[i]];
    return res;
}

char ch[5];
int main() {
    //freopen("input.txt", "r", stdin);
    for(int i = 0; i < 10; ++i) {
        for(int j = 0; j < 10; ++j)scanf("%d", &tab[i][j]);
    }
    for(int i = 0; i < 10000; ++i) {
        init[i] = i * 10 + gete(i);
    }
    for(int i = 0; i < 10000; ++i) {
        for(int j = 49; j >= 0; --j) {
            tochar(alt[i][j], init[i]);
            alt[i][j][j / 10] = (9 - j % 10) + 0;
        }
        tochar(alt[i][50], init[i]);
        swap(alt[i][50][0], alt[i][50][1]);
        tochar(alt[i][51], init[i]);
        swap(alt[i][51][1], alt[i][51][2]);
        tochar(alt[i][52], init[i]);
        swap(alt[i][52][2], alt[i][52][3]);
        tochar(alt[i][53], init[i]);
        swap(alt[i][53][3], alt[i][53][4]);
    }
    int ans = 0;
    for(int i = 0; i < 10000; ++i) {
        bool flag = true;
        for(int j = 0;j < 54;++j){
            if(atoi(alt[i][j]) == init[i])continue;
            if(check(alt[i][j]) == 0)flag = false;
        }
        if(!flag)ans++;
    }
    printf("%d\n", ans);
    return 0;
}

 

以上是关于CFGym 101158B(巨坑题)的主要内容,如果未能解决你的问题,请参考以下文章

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

HDU 5038 Grade (水题,坑题)

CF 633D斐波那契

CFGym 101490J 题解

CFGym 101505I 题解

CFGym 101194L 题解