码迷,mamicode.com
首页 > 其他好文 > 详细

CFGym 101158B(巨坑题)

时间:2017-10-07 22:52:38      阅读:247      评论:0      收藏:0      [点我收藏+]

标签:nbsp   mon   ini   error   name   col   for   ==   bit   

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

题意:对于[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(巨坑题)

标签:nbsp   mon   ini   error   name   col   for   ==   bit   

原文地址:http://www.cnblogs.com/565261641-fzh/p/7635999.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!