題目鏈接:hdu 4760 Good Firewall
題目大意:有1個防火墻,具有添加1個子網絡,刪除1個子網絡,和轉發包的操作。
解題思路:對子網掩碼前綴建立字典樹,每一個前綴終止節點用1個set記錄屬于哪些子網絡,ip下限。那末增加和刪除操
作既可以解決了。對查詢操作,分別查詢兩個ip,處理除兩個ip可能屬于的網絡,判斷有沒有共同便可。
#include <cstdio>
#include <cstring>
#include <set>
#include <algorithm>
using namespace std;
typedef long long ll;
typedef pair<int, ll> pii;
typedef set<pii>::iterator iter;
const int maxn = 1024 * 15 + 10;
const int maxm = 105;
const int sigma_size = 2;
struct Tire {
int sz, sv;
int g[maxn * maxm][sigma_size];
int idx[maxn * maxm], cnt[1030];
set<pii> ans, vis[maxn];
void init();
int newSet();
void addSet(int id, ll limt);
void insert(char* str, pii x);
void remove(char* str, pii x);
void find(char* str);
bool judge(char* a, char* b);
}T;
struct Network {
int n;
ll suf[20];
char ip[20][maxm];
Network() {
n = 0;
memset(suf, 0, sizeof(suf));
}
}net[1030];
ll change(char* ans, bool flag) {
char str[105];
int n = strlen(str), a[4], b;
if (flag)
scanf("%d.%d.%d.%d/%d", &a[0], &a[1], &a[2], &a[3], &b);
else {
scanf("%d.%d.%d.%d", &a[0], &a[1], &a[2], &a[3]);
b = 32;
}
int t = 0;
ll ret = 0;
for (int i = 0; i < 4; i++) {
for (int j = 7; j >= 0; j--) {
if (t < b)
ans[t] = ((a[i]>>j)&1) + '0';
else if (((a[i]>>j)&1))
ret |= (1LL<<(31-t));
t++;
}
}
ans[t] = '
主站蜘蛛池模板:
九色91精品国产网站
|
xx综合网|
亚洲依依成人精品
|
又粗又大又爽 真人一级毛片
|
亚洲精品视频免费
|
爱爱a|
亚洲日本视频
|
国产日产欧产精品精品推荐在线
|
国内精神品一区区
|
多人伦交性欧美在线观看
|
一级毛片一级毛片免费毛片
|
欧美激情αv一区二区三区
欧美激情第二页
|
在线国产高清
|
www.视频在线观看
|
在线久
|
欧美色图天堂网
|
老女人一级全黄肉体毛片
|
一区二区三区四区在线免费观看
|
中文字幕在线免费观看
|
亚洲视频 在线观看
|
久久精品免看国产成
|
精品久久久久久久一区二区伦理
|
欧美成人国产一区二区
|
亚洲国产片
|
男女啪啪成人免费网站
|
免费在线观看一级毛片
|
欧美高清成人videosex
|
无码免费一区二区三区免费播放
|
一区二区三区 日韩
|
欧美18videosex性视频
|
亚洲第一页在线播放
|
好大好湿好硬顶到了好爽在
|
成人在线观看免费爱爱
|
国产精彩视频
|
欧美色综合网站
|
古代级a毛片可以免费看
|
亚洲三级图
|
国产精品性视频免费播放
|
国产成人毛片毛片久久网
|
亚洲欧美一区二区三区综合
|
欧美极度另类videos
|