NYOJ - [第九届河南省程序设计大赛]Decimal integer conversion(暴力)

题目链接:http://nyoj.top/problem/1277

  • 内存限制:64MB 时间限制:1000ms 特判: No

题目描述

XiaoMing likes mathematics, and he is just learning how to convert numbers between different bases , but he keeps making errors since he is only 6 years old. Whenever XiaoMing converts a number to a new base and writes down the result, he always writes one of the digits wrong. For example , if he converts the number 14 into binary (i.e., base 2), the correct result should be "1110", but he might instead write down "0110" or "1111". XiaoMing never accidentally adds or deletes digits, so he might write down a number with a leading digit of " 0" if this is the digit she gets wrong. Given XiaoMing 's output when converting a number N into base 2 and base 3, please determine the correct original value of N (in base 10). (N<=10^10) You can assume N is at most 1 billion, and that there is a unique solution for N. 

输入描述

The first line of the input contains one integers T, which is the nember of test cases (1<=T<=8)
Each test case specifies:
* Line 1: The base-2 representation of N , with one digit written incorrectly.
* Line 2: The base-3 representation of N , with one digit written incorrectly. 

输出描述

For each test case generate a single line containing a single integer , the correct value of N

样例输入

1
1010
212

样例输出

14

解题思路

题意就是二进制串和三进制串都有一位是错误的,找出错误使其两个串相等。直接枚举两个串的每一位,直到满足条件使其相等。

#include <bits/stdc++.h>
using namespace std;
int main() {
    char a[1005], b[1005];
    int t, A, B, la, lb, temp;    
    scanf("%d%*c", &t);
    while (t--) {
        temp = 0;
        scanf("%s%s", a, b);
        la = strlen(a), lb = strlen(b);
        for (int i = 0; i < la && !temp; i++) {
            A = 0;
            a[i] = (a[i] - '0' + 1) % 2 + '0';
            for (int j = 0; j < la; j++)
                A = A * 2 + a[j] - '0';
            a[i] = (a[i] - '0' + 1) % 2 + '0';
            for (int j = 0; j < lb && !temp; j++) {
                for (int k = 0; k < 2 && !temp; k++) {
                    B = 0;
                    b[j] = (b[j] - '0' + 1) % 3 + '0';
                    for (int l = 0; l < lb; l++)
                        B = B * 3 + b[l] - '0';
                    if (A == B)
                        temp = 1;
                }
                b[j] = (b[j] - '0' + 1) % 3 + '0';
            }
        }
        printf("%d\n", A);
    }
    return 0;
}
全部评论

相关推荐

等闲_:感觉有好多地方会被问穿,mysql存储向量这个方案问题应该很大的,如果深问的的话,为什么不用es,不用pg,不用mivus,分块策略是怎么做的,向量化是怎么向量化的,稠密向量还是稀疏向量,再深问余弦相似度,HSWM算法,Bm25算法,为什么不用混合检索或者Rank重排序优化?其他的项目不停机分库分表咋实现的,切库过程中数据有diff的话有没有补偿策略?既然有了分库分表了有没有碰到业务上不好优化的慢sql,让这个sql读从库?而且点评的话,最好自己压测过,要不这个数据也不好解释。现在就27的情况来看,很多同学已经有了中大厂实习,这个节点也会偏向这些有大厂实习的92同学,而且hc也不多,所以坚持海投吧
听劝,我这个简历该怎么改...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务