zoukankan      html  css  js  c++  java
  • ACM-ICPC 2018 沈阳赛区网络预赛 I Lattice's basics in digital electronics(模拟)

    https://nanti.jisuanke.com/t/31450

    题意

    给出一个映射(左为ascll值),然后给出一个16进制的数,要求先将16进制转化为2进制然后每9位判断,若前8位有奇数个1且第9位为0则这个子串取,若前8位有偶数个1且第9 位为1也取。取出的串在映射中进行查找,输出对应ascll值的字符

    分析

    用map直接模拟,细节需要注意。

    #include <bits/stdc++.h>
    using namespace std;
    #define ms(a, b) memset(a, b, sizeof (a))
    typedef long long ll;
    const int maxn = 1e5+10;
    //const int inf = 1e9+7;
    map<string, char> dic;
    map<string, char> ::iterator it;
    char s[20];
    char data[200010];
    char data01[800010];
    char r_data[800010];
    int HtoD(char x){
        if(x>='0'&&x<='9'){
            return x - '0';
        }else if(x>='A'&&x<='F'){
            return x-'A'+10;
        }else{
            return x-'a'+10;
        }
    }
    bool check(int x){
        int cnt = 0;
        for(int i = x;i<x+8;i++){
            if(data01[i]=='1')  cnt++;
        }
        if(cnt&1){
            return data01[x+8]=='0';
        }else{
            return data01[x+8]=='1';
        }
    }
    int main(){
    #ifdef LOCAL
        freopen("in","r",stdin);
    //    freopen("out.txt","w",stdout);
    #endif // LOCAL
        int t;
        scanf("%d", &t);
        for(int _=0;_<t;_++){
            int m, n, c;
            scanf("%d%d", &m, &n);
            dic.clear();
            for(int i = 0;i<n;i++){
                scanf("%d%s", &c, s);
                dic[s]=(char)c;
            }
            scanf("%s", data);
            int data_len = strlen(data);
            for(int i = 0;i<data_len;i++){
                int x = HtoD(data[i]);
                for(int j = 3;j>=0;j--){
                    if(x&(1<<j))
                        data01[4*i+3-j] = '1';
                    else
                        data01[4*i+3-j] = '0';
                }
            }
    //        for(int i = 0;i<data_len*4;i+=4){
    //            printf("%c", data01[i]);
    //            printf("%c", data01[i+1]);
    //            printf("%c", data01[i+2]);
    //            printf("%c", data01[i+3]);
    //            printf(" ");
    //        }
            int r_len = 0;
            for(int i = 0;i<data_len*4;i+=9){
                if(i+9<=data_len*4 && check(i)){
                    for(int j = i;j<i+8;j++){
                        r_data[r_len++] = data01[j];
    //                    printf("%c", data01[j]);
                    }
    //                printf("
    ");
                }
            }
            string query = "";
            for(int i = 0;i<r_len;i++){
                query += r_data[i];
                it = dic.find(query);
                if(it!=dic.end()){
                    printf("%c", (*it).second);
                    query = "";
                    m--;
                    if(m==0)    break;
                }
    
            }
            puts("");
        }
        return 0;
    }
  • 相关阅读:
    新浪微博评论抓取
    ubuntu下ssh登录特别慢的问题
    在ubuntu13.04上安装Mac主题
    ubuntu修复grub
    linux卸载自己编译安装的内核
    ubuntu下搭建sublime text2的java开发环境
    CentOS防火墙对特定端口允许
    python笔记:python的表达式
    python笔记一:python变量
    python笔记一:python初步
  • 原文地址:https://www.cnblogs.com/fht-litost/p/9671542.html
Copyright © 2011-2022 走看看