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+;
//const int inf = 1e9+7;
map<string, char> dic;
map<string, char> ::iterator it;
char s[];
char data[];
char data01[];
char r_data[];
int HtoD(char x){
if(x>=''&&x<=''){
return x - '';
}else if(x>='A'&&x<='F'){
return x-'A'+;
}else{
return x-'a'+;
}
}
bool check(int x){
int cnt = ;
for(int i = x;i<x+;i++){
if(data01[i]=='') cnt++;
}
if(cnt&){
return data01[x+]=='';
}else{
return data01[x+]=='';
}
}
int main(){
#ifdef LOCAL
freopen("in","r",stdin);
// freopen("out.txt","w",stdout);
#endif // LOCAL
int t;
scanf("%d", &t);
for(int _=;_<t;_++){
int m, n, c;
scanf("%d%d", &m, &n);
dic.clear();
for(int i = ;i<n;i++){
scanf("%d%s", &c, s);
dic[s]=(char)c;
}
scanf("%s", data);
int data_len = strlen(data);
for(int i = ;i<data_len;i++){
int x = HtoD(data[i]);
for(int j = ;j>=;j--){
if(x&(<<j))
data01[*i+-j] = '';
else
data01[*i+-j] = '';
}
}
// 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 = ;
for(int i = ;i<data_len*;i+=){
if(i+<=data_len* && check(i)){
for(int j = i;j<i+;j++){
r_data[r_len++] = data01[j];
// printf("%c", data01[j]);
}
// printf("\n");
}
}
string query = "";
for(int i = ;i<r_len;i++){
query += r_data[i];
it = dic.find(query);
if(it!=dic.end()){
printf("%c", (*it).second);
query = "";
m--;
if(m==) break;
} }
puts("");
}
return ;
}
上一篇:mysql innobackupex 备份及恢复


下一篇:如何利用 jQuery 修改 css 中带有 !important 的样式属性?