CCF-CSP 29次 第三题【202303-3 LDAP】(多个STL+递归)

计算机软件能力认证考试系统 

 

#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <unordered_map>
#include <string>using namespace std;typedef long long LL;const int N = 2510, M = 510;int n, m;struct User
{int DN;unordered_map<LL, LL> attr;
}user[N];// 原子操作 
vector<int> match(string str)
{vector<int> res;if (str.find(":") != -1){int loc = str.find(":");auto key = str.substr(0, loc);auto value = str.substr(loc + 1, str.size() - loc - 1);// str to int	int k = stoi(key);int v = stoi(value);for (int i = 0; i < n; i ++ ){if (user[i].attr.count(k))if (user[i].attr[k] == v)res.push_back(user[i].DN);}sort(res.begin(), res.end());}else if (str.find('~') != -1){int loc = str.find('~');auto key = str.substr(0, loc);auto value = str.substr(loc + 1, str.size() - loc - 1);// str to int	int k = stoi(key);int v = stoi(value);for (int i = 0; i < n; i ++ ){if (user[i].attr.count(k))if (user[i].attr[k] != v)res.push_back(user[i].DN);}sort(res.begin(), res.end());}return res;
}vector<int> match2(string str)  // &(|(1:2)(3~4))(101:202)
{vector<int> res;// 匹配 1:2 if (str[0] > '0' && str[0] <= '9') return match(str); // 匹配 &(...)(...) else{char c = str[0];str.erase(0, 1);// 当左右括号数量相同时,得到子表达式 int len = str.size();string s;int loc;for (int i = 1; i <= len; i ++ ){s = str.substr(0, i);if (count(s.begin(), s.end(), '(') == count(s.begin(), s.end(), ')')){loc = i;break;}}string sub_l = str.substr(1, loc - 2); // 左边括号中字串 string sub_r = str.substr(loc + 1, str.size() - loc - 2); // 右边括号中字串 vector<int> res_l = match2(sub_l); // 递归调用 vector<int> res_r = match2(sub_r);if (c == '&'){					vector <int> v_intersection;// 取交集 set_intersection(res_l.begin(), res_l.end(),res_r.begin(), res_r.end(),back_inserter(v_intersection));	return v_intersection;}else if (c == '|'){vector <int> v_union;// 取并集 set_union(res_l.begin(), res_l.end(),res_r.begin(), res_r.end(),back_inserter(v_union));	return v_union;}}
}int main()
{scanf("%d", &n);for (int i = 0; i < n; i ++ ){int DN, cnt;scanf("%d%d", &DN, &cnt);user[i].DN = DN;while (cnt -- ){LL a, v;scanf("%lld%lld", &a, &v);user[i].attr[a] = v;}}scanf("%d", &m);while (m -- ){string str;cin >> str;vector<int> res;res = match2(str);sort(res.begin(), res.end());if (res.size() == 0) cout << endl;else{for (auto i: res) cout << i << " "; cout << endl;}}return 0;
}/*
2
1 2 1 2 2 3
2 2 2 3 3 1 
5
1:2
3~1
&(1:2)(2:3)
|(1:2)(3:1)
&(|(1:2)(3~4))(101:202)
*/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/56490.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【web逆向】全报文加密及其登录流程的分析案例

aHR0cHM6Ly9oZWFsdGguZWxkZXIuY2NiLmNvbS9zaWduX2luLw 涉及加密库jsencrypt 定位加密点 先看加密的请求和响应&#xff1a; 全局搜索加密字段jsondata&#xff0c;这种非特定参数的一般一搜一个准&#xff0c;搜到就是断点。起初下的断点没停住&#xff0c;转而从调用栈单步…

概念解析 | 生成式与判别式模型在低级图像恢复与点云重建中的角力:一场较量与可能性探索

注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:生成式模型与判别式模型在低级图像恢复/点云重建任务中的优劣与特性。 生成式与判别式模型在低级图像恢复与点云重建中的角力:一场较量与可能性探索 1. 背景介绍 机器学习…

【小吉带你学Git】idea操作(2)_版本和分支的相关操作

&#x1f38a;专栏【Git】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【Counting Stars 】 欢迎并且感谢大家指出小吉的问题&#x1f970; 文章目录 &#x1f354;版本⭐首先创建一个项目⭐添加暂存区⭐提交本地库&#x1f33…

链表OJ题

题目一&#xff1a;206反转链表 题目要求&#xff1a; 思路分析&#xff1a; 代码实现&#xff1a; struct ListNode* reverseList(struct ListNode* head){ //n1,n2反转指针 n3链接下一个结点的指针struct ListNode* n1,*n2,*n3;n1 NULL;n2 head;if(n2)//有可能head本身…

gin和gorm框架安装

理论上只要这两句命令 go get -u gorm.io/gorm go get -u github.com/gin-gonic/gin然而却出现了问题 貌似是代理问题&#xff0c;加上一条命令 go env -w GOPROXYhttps://goproxy.cn,direct 可以成功安装 安装gorm的数据库驱动程序 go get -u gorm.io/driver/mysql

按轨迹运行

文章目录 import math import timeimport numpy as np import matplotlib.pyplot as pltdef plot_arrow(x, y, yaw, length=5, width=1):dx = length * math.cos(yaw)dy = length * math.sin(yaw)plt.arrow(x, y, dx, dy, head_length=width, head_width=width)plt.plot([x, x …

Mybatis-plus动态条件查询QueryWrapper的使用

Mybatis-plus动态条件查询QueryWrapper的使用 一&#xff1a;queryWrapper介绍 queryWrapper是mybatis plus中实现查询的对象封装操作类&#xff0c;可以封装sql对象&#xff0c;包括where条件&#xff0c;order by排序&#xff0c;select哪些字段等等&#xff0c;他的层级关…

任务14、无缝衔接,MidJourney瓷砖(Tile)参数制作精良贴图

14.1 任务概述 在这个实验任务中,我们将深入探索《Midjourney Ai绘画》中的Tile技术和其在艺术创作中的具有挑战性的应用。此任务将通过理论学习与实践操作相结合的方式,让参与者更好地理解Tile的核心概念,熟练掌握如何在Midjourney平台上使用Tile参数,并实际运用到AI绘画…

spring — Spring Security 5.7与6.0差异性对比

1. spring security Spring Security 是一个提供身份验证、授权和针对常见攻击保护的框架。 凭借对保护命令式和反应式应用程序的一流支持&#xff0c;它成为基于Spring的标准安全框架。 Spring Security 在最近几个版本中配置的写法都有一些变化&#xff0c;很多常见的方法都…

Intellij IDEA运行报Command line is too long的解决办法

想哭&#xff0c;vue前端运行起来&#xff0c;对应的后端也得起服务。 后端出的这个bug&#xff0c;下面的博客写的第二种方法&#xff0c;完整截图是下面这个。 ​​​​​​​​​​​​​​​​​​​​Intellij IDEA运行报Command line is too long的解决办法 - 知乎 (zh…

集睿致远/CS5269设计Typec转HDMI带PD100w快充方案

集睿致远ASL推出的CS5269AN是一款高性能Typec/DP1.4转HDMI 4k_60Hz带PD100w快充转换器方案芯片 DP接口包括4条主通道、辅助通道和HPD信号。支持5.4Gbps(HBR2&#xff09;的数据速率。DP接收机兼容HDCP1.4和HDCP2.3内容保护方案具有嵌入式密钥&#xff0c;用于数字音视频内容的…

【Spring Cloud 四】Ribbon负载均衡

Ribbon负载均衡 系列文章目录背景一、什么是Ribbon二、为什么要有Ribbon三、使用Ribbon进行负载均衡服务提供者A代码pom文件yml配置文件启动类controller 服务提供者Bpom文件yml配置文件启动类controller 服务消费者pom文件yml文件启动类controller 运行测试 四、Ribbon的负载均…