关注
#include<algorithm>
#include<utility>
#include<string>
#include<sstream>
#include<iostream>
#include<vector>
#include<map>
#include<bitset>
std::pair<unsigned, unsigned> getad_ms(std::string str) {
using namespace std;
replace(str.begin(), str.end(), '.', ' ');
replace(str.begin(), str.end(), '/', ' ');
istringstream istr(str);
pair<unsigned, unsigned> pa;
for (int i{},j;i < 4;++i) {
istr >> j;
pa.first += j*(1 << 8 * (3 - i));
}
!istr.eof() ? istr >> pa.second : (pa.second = 32, istr);
return pa;
}
void trim_front(std::string& str, char ch) {
size_t sz = str.find_first_not_of(ch, 0);
str.erase(0, sz);
}
class search_tree {
public:
search_tree():head{ new node{} }/*,refuse_without_allow{false}*/{}
void add(unsigned add, unsigned mask, bool acc, int num);
bool accept(unsigned int add);
~search_tree();
private:
enum class states
{
mid_state ,allow, deny
};
struct node
{
node *left, *right;
states acc;
int num;
node() :left{ nullptr }, right{ nullptr }, acc{ states::mid_state } {}
};
node *head;
void del(node *p);
};
void search_tree::add(unsigned add, unsigned mask, bool acc,int num) {
using namespace std;
bitset<32> bit(add);
node *pos = head;
for (int i{};i < mask;++i) {
if (pos->acc != states::mid_state)
return;
if (bit[31-i]) {
if (pos->right == nullptr)
pos->right = new node{};
pos = pos->right;
}
else
{
if (pos->left == nullptr)
pos->left = new node{};
pos = pos->left;
}
}
if (pos->acc != states::mid_state) return;
pos->num = num;
pos->acc = acc ? states::allow : states::deny;
}
bool search_tree::accept(unsigned int add) {
using namespace std;
bitset<32> bit(add);
node * pos = head, *minnum{ nullptr };
int num=numeric_limits<int>::max();
for (size_t i = 0;i<32&&pos; i++)
{
if (pos&&pos->acc != states::mid_state) {
if (pos->num < num) {
num = pos->num;
minnum = pos;
}
}
pos = bit[31-i] ? pos->right : pos->left;
}
if (minnum == nullptr) return true;
return minnum->acc == states::allow ? true : false;
}
search_tree::~search_tree() {
del(head);
}
void search_tree::del(search_tree::node* p) {
if (p->left)
del(p->left);
if (p->right)
del(p->right);
delete p;
}
int main() {
using namespace std;
for (int i, j;cin >> i >> j;) {
string str;
search_tree treenet;
while (isspace(cin.peek()))
{
cin.get();
}
for (int k{};k < i;++k) {
getline(cin, str);
trim_front(str, ' ');
auto pos = str.find(' ');
auto ps = getad_ms(string(str, pos + 1));
bool acc = str[0] == 'a' ? true:false;
treenet.add(ps.first, ps.second, acc,k);
}
for (int k{};k < j;++k) {
cin >> str;
auto pa = getad_ms(str);
cout << (treenet.accept(pa.first)?"YES":"NO") << '\n';
}
}
}
查看原帖
点赞 1
相关推荐
点赞 评论 收藏
分享
想干测开的tomca...:这份简历是“短期项目硬堆中大型系统技术”的“技术炫技式造假模板”,槽点密集到能当反面教材:
### 1. 「项目时长」和「技术密度」严重脱节,造假痕迹焊死在简历上
两个项目时长分别是**3个月、2个月**,但堆了Spring AI、Elasticsearch、MinIO、Kafka、ShardingSphere、Docker、Sentinel等近20个中大型项目才用的技术——正常情况下,光把这些中间件的文档看完+环境搭好,3个月都不够,更别说实现“AI多轮对话、分库分表、RBAC权限、大模型调用”这些功能。
说白了:你这不是“做项目”,是把“后端技术栈清单”往项目里硬塞,明摆着“只调用了API,没碰过核心逻辑”。
点赞 评论 收藏
分享
12-21 15:20
重庆邮电大学 Java 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 2025年终总结 #
173062次浏览 2922人参与
# 找工作,行业重要还是岗位重要? #
85326次浏览 1688人参与
# 职场上哪些行为很加分? #
306962次浏览 3452人参与
# 大家每天通勤多久? #
69837次浏览 442人参与
# 实习的内耗时刻 #
211211次浏览 1539人参与
# 你面试体验感最差/最好的公司 #
17911次浏览 293人参与
# 一人说一个提前实习的好处 #
10826次浏览 204人参与
# 今年你最想重开的一场面试是? #
4154次浏览 69人参与
# 秋招落幕,你是He or Be #
12284次浏览 240人参与
# 互联网行业现在还值得去吗 #
46928次浏览 351人参与
# 实习没事做是福还是祸? #
16867次浏览 256人参与
# 面试吐槽bot #
165020次浏览 814人参与
# 重来一次,你会对开始求职的自己说 #
6136次浏览 154人参与
# 反问环节如何提问 #
126390次浏览 2664人参与
# 礼物开箱Plog #
695次浏览 24人参与
# 工作中听到最受打击的一句话 #
6694次浏览 114人参与
# 团建是“福利”还是是 “渡劫” #
7250次浏览 150人参与
# 我的第一份实习怎么找的 #
208589次浏览 1827人参与
# 比亚迪工作体验 #
74742次浏览 281人参与
# 大家实习每天都在干啥 #
106544次浏览 581人参与
三奇智元机器人科技有限公司公司福利 70人发布