hiho149周 - 数据结构 trie树
坑点:accept和deny的ip可能相同,需加个判断
#include <cstdio>
#include <cstdlib>
#include <vector>
#include <string>
#include <cstring>
#include <iostream>
#define OO 0x0fffffff
#define MIN(a,b) (a<b?a:b)
using namespace std; struct NODE{
NODE *left,*right;
int aid;
bool accept;
NODE(){
aid = -;
left = right = NULL;
}
};
NODE root;
int digits[];
void add_acl(int id,char *acl,bool accept){
NODE *ptr = &root;
for(int i=;acl[i];i++){
if(acl[i]=='') {
if(ptr->right==NULL) ptr->right = new NODE();
ptr = ptr->right;
}
else{
if(ptr->left==NULL) ptr->left = new NODE();
ptr = ptr->left;
}
}
if(ptr->aid<){
ptr->aid = id;
ptr->accept = accept;
}
}
void parse_ip(char *input,char *output,int len){
sscanf(input,"%d.%d.%d.%d",digits+,digits+,digits+,digits+);
int i,j;
for(i=;i<;i++){
int td = digits[i];
for(j=(i+)*-;j>=i*;j--){
output[j] = ''+(td&);
td>>=;
}
}
output[len]='\0';
}
int main(){
int m,n,len;
char type[],str[],ip[];
scanf("%d%d",&n,&m);
for(int i=;i<n;i++){
cin>>type>>str;
len = ;
std::size_t idx = string(str).find('/');
if(idx!=std::string::npos){
str[idx]='\0';
len = atoi(str+idx+);
}
parse_ip(str,ip,len);
add_acl(i,ip,type[]=='a');
}
for(int i=;i<m;i++){
cin>>str;
parse_ip(str,ip,);
NODE *ptr = &root;
int ans = OO;
bool accept = true;
int iptr = ;
while(ptr){
if(ptr->aid>=) {
if(ptr->aid<ans){
ans = ptr->aid;
accept = ptr->accept;
}
}
if(ip[iptr]=='') ptr=ptr->right;
else ptr=ptr->left;
iptr++;
}
puts(accept?"YES":"NO");
}
return ;
}
hiho149周 - 数据结构 trie树的更多相关文章
- 数据结构~trie树(字典树)
1.概述 Trie树,又称字典树,单词查找树或者前缀树,是一种用于快速检索的多叉树结构,如英文字母的字典树是一个26叉树,数字的字典树是一个10叉树. 我理解字典树是看了这位大佬博客.还不了解字典树的 ...
- hihoCoder hiho一下 第二周 #1014 : Trie树(Trie树基本应用)
思路: 完全看题目中的介绍就行了.还有里面的input写道:不保证是英文单词,也有可能是火星文单词哦.比赛结束后的提交是不用考虑26个字母之外的,都会AC,如果考虑128种可能的话,爆了内存.步骤就是 ...
- 【hiho一下第二周 】Trie树
[题目链接]:http://hihocoder.com/problemset/problem/1014 [题意] [题解] 在字典树的域里面加一个信息cnt; 表示这个节点下面,记录有多少个单词; 在 ...
- 【数据结构】Trie树
数据结构--Trie树 概念 Trie树,又称字典树.前缀树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计 ...
- 基于trie树的具有联想功能的文本编辑器
之前的软件设计与开发实践课程中,自己构思的大作业题目.做的具有核心功能,但是还欠缺边边角角的小功能和持久化数据结构,先放出来,有机会一点点改.github:https://github.com/chu ...
- 讲解——Trie树(字典树)
Trie树(字典树) 一.引入 字典是干啥的?查找字的. 字典树自然也是起查找作用的.查找的是啥?单词. 看以下几个题: 1.给出n个单词和m个询问,每次询问一个单词,回答这个单词是否在单 ...
- Trie树(转)
原文http://www.cnblogs.com/TheRoadToTheGold/p/6290732.html 一.引入 字典是干啥的?查找字的. 字典树自然也是起查找作用的.查找的是啥?单词. 看 ...
- 浅谈Trie树(字典树)
Trie树(字典树) 一.引入 字典是干啥的?查找字的. 字典树自然也是起查找作用的.查找的是啥?单词. 看以下几个题: 1.给出n个单词和m个询问,每次询问一个单词,回答这个单词是否在单 ...
- [转] 浅谈Trie树(字典树)
原文地址:https://www.cnblogs.com/TheRoadToTheGold/p/6290732.html Trie树(字典树) 一.引入 字典是干啥的?查找字的. 字典树自然也是起查找 ...
随机推荐
- Windows 10 Mobile 演示:系统输入法功能演示
笔者近期会发布多篇<Windows 10 Mobile 演示>文章,帮助想买 Windows 10 手机的朋友了解 Windows 10 Mobile 系统特色.今天给大家带来 Windo ...
- 【参考】.class文件的JDK编译版本查看
使用 UltraEdit 打开 .class 文件,第一行内容: 00000000h: CA FE BA BE 00 00 00 32 00 A9 07 00 02 01 00 37 ; 漱壕... ...
- idea运行提示Error:java:无效的源发行版:1.9
如果你是jdk1.8 改到8即可,如图:
- 洛谷P3254 圆桌问题 网络流_二分图
Code: #include<cstdio> #include<algorithm> #include<vector> #include<queue> ...
- TP5 分页类,自定义样式
结合X-admin 后台框架 在做项目,为了保持分页风格的一致,所以需要自定义 一个分页类. 一.在项目的 extend 目录,创建 cus 目录 二.创建 Page 分页类,代码如下 <?ph ...
- Node_进阶_4
Node进阶第四天 一.传统数据库技术回顾 数据库就是存储数据的,那么存储数据用txt就行了啊,为什么要有数据库? 理由之一:数据库有行.列的概念,数据有关系,数据不是散的. 老牌数据库,比如Mysq ...
- NodeJS学习笔记 (3)域名解析-dns(ok)
域名解析:dns.lookup() 比如我们要查询域名 www.qq.com 对应的ip,可以通过 dns.lookup() . var dns = require('dns'); dns.looku ...
- ajaxFileUpload 返回的数据报错
$.ajaxFileUpload({ url : '/updateMallGoods', data : { "goodsName":goodsName, "proDesc ...
- redis做成windows服务
打开cmd切换到redis根目录 执行安装命令 redis-server.exe --service-install redis.windows.conf --loglevel verbose 卸载 ...
- 【Paper Reading】Object Recognition from Scale-Invariant Features
Paper: Object Recognition from Scale-Invariant Features Sorce: http://www.cs.ubc.ca/~lowe/papers/icc ...