爆款云主机2核4G限时秒杀,88元/年起!
查看详情

活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
热门活动
  • 618智算钜惠季 爆款云主机2核4G限时秒杀,88元/年起!
  • 免费体验DeepSeek,上天翼云息壤 NEW 新老用户均可免费体验2500万Tokens,限时两周
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云脑AOne NEW 连接、保护、办公,All-in-One!
  • 中小企业应用上云专场 产品组合下单即享折上9折起,助力企业快速上云
  • 息壤高校钜惠活动 NEW 天翼云息壤杯高校AI大赛,数款产品享受线上订购超值特惠
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

智算服务

打造统一的产品能力,实现算网调度、训练推理、技术架构、资源管理一体化智算服务
智算云(DeepSeek专区)
科研助手
  • 算力商城
  • 应用商城
  • 开发机
  • 并行计算
算力互联调度平台
  • 应用市场
  • 算力市场
  • 算力调度推荐
一站式智算服务平台
  • 模型广场
  • 体验中心
  • 服务接入
智算一体机
  • 智算一体机
大模型
  • DeepSeek-R1-昇腾版(671B)
  • DeepSeek-R1-英伟达版(671B)
  • DeepSeek-V3-昇腾版(671B)
  • DeepSeek-R1-Distill-Llama-70B
  • DeepSeek-R1-Distill-Qwen-32B
  • Qwen2-72B-Instruct
  • StableDiffusion-V2.1
  • TeleChat-12B

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场创新解决方案
办公协同
  • WPS云文档
  • 安全邮箱
  • EMM手机管家
  • 智能商业平台
财务管理
  • 工资条
  • 税务风控云
企业应用
  • 翼信息化运维服务
  • 翼视频云归档解决方案
工业能源
  • 智慧工厂_生产流程管理解决方案
  • 智慧工地
建站工具
  • SSL证书
  • 新域名服务
网络工具
  • 翼云加速
灾备迁移
  • 云管家2.0
  • 翼备份
资源管理
  • 全栈混合云敏捷版(软件)
  • 全栈混合云敏捷版(一体机)
行业应用
  • 翼电子教室
  • 翼智慧显示一体化解决方案

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
  • 天翼云EasyCoding平台
天翼云培训认证
  • 天翼云学堂
  • 天翼云市场商学院
天翼云合作计划
  • 云汇计划
天翼云东升计划
  • 适配中心
  • 东升计划
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
开放能力
  • EasyCoding敏捷开发平台
培训与认证
  • 天翼云学堂
  • 天翼云认证
魔乐社区
  • 魔乐社区

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 建议与反馈
  • 用户体验官
  • 服务保障
  • 客户公告
  • 会员中心
增值服务
  • 红心服务
  • 首保服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 天翼云4.0
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 智算服务
  • 产品
  • 解决方案
  • 应用商城
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
      • 文档
      • 控制中心
      • 备案
      • 管理中心

      C++位运算、状态压缩、枚举子集汇总

      首页 知识中心 软件开发 文章详情页

      C++位运算、状态压缩、枚举子集汇总

      2025-02-18 07:29:49 阅读次数:15

      amp,mask,二进制位,子集,异或,枚举,运算

      本文涉及知识点

      证明容斥原理和证明集合枚举都用到了:二项式定理
      【数学归纳法 组合数学】容斥原理

      基础知识

      位运算优先级

      位运算的结合性都是从左到右。优先级低的先运算。

      优先级 位运算符 说明
      7 << >> 位左移/位右移
      10 & 按位与
      11 ^ 按位异或
      12   按位或

      注意:不同的编译系统的实现可能不同,所以加上括号保险。就算你把运算顺序牢记于心,你的同事未必记得。

      异或(xor ^ )

      定义:x1 ⊕ \oplus ⊕x2 = y,对各二进制位分别运算,如果x1和x2的某个二进制位不同(异),则y的此二进制位为1,否则为0。
      性质一:
      n个数的异或和(积),如果这n个数的某个二进制为1的数量是偶数,则结果的此二进制位是0(偶数个1);否则结果的此二进制为是1(奇数个1)。现在用数学归纳发证明:
      a, {1,1}和{0,0}是偶数个1,结果为0;{1,0},{0,1} 奇数个1,结果为1。
      b,假设n个数符合,则n+1个数也符合。将前两个数进行异或运算就符合假设了。
      推论一:
      根据性质一,可得如下推论:n个数求异或积,可以任意调换数的顺序结果不变。
      性质二:
      0 ⊕ \oplus ⊕ x = x
      性质三:
      x ⊕ \oplus ⊕ x = 0
      性质四,异或逆运算是其本身:
      x1 ⊕ \oplus ⊕ x2 = y ,则 y ⊕ \oplus ⊕ x2 = x1
      性质五:
      x1 ⊕ \oplus ⊕ x2 <= x1 + x2
      如果x1,x2的 所有的二进制位不同时为1,则 x1 ⊕ \oplus ⊕ x2 == x1 + x2
      否则: x1 ⊕ \oplus ⊕ x2 < x1 + x2

      习题

      n双m种筷子, 遗失一只,求遗失的一只长度。m值未知。
      已知:2n-1只筷子的长度:{a1,a2 ⋯ a 2 n − 2 , a 2 n − 1 \cdots a_{2n-2},a_{2n-1} ⋯a2n−2​,a2n−1​ }
      思路:根据性质三,答案就是这2n-1的数的异或积。

      位与(&)

      定义: x1 & \And & x2 = y。对二进制位分别运算,x1和x2的某二进制位全部为1,y对应的二进制位为1;否则为0。
      性质一:
      n个数依次位与结果为y,如果这n个数的某二进制位全部为1,则y的对应二进制位为1,否则为0。
      推论一:
      根据性质一,可得如下推论:n个数求与积,可以任意调换数的顺序结果不变。
      性质二:
      (-1)&x = x
      性质三:
      x1 & \And & x2 = y <=min(x1,x2)

      位或(|)

      定义: x1 ∨ \lor ∨ x2 = y。对二进制位分别运算,x1和x2的某二进制位全部为0,y对应的二进制位为0;否则为1。
      性质一:
      n个数依次位与结果为y,如果这n个数的某二进制位全部为0,则y的对应二进制位为0,否则为1。
      推论一:
      根据性质一,可得如下推论:n个数求与积,可以任意调换数的顺序结果不变。
      性质二:
      0 ∨ \lor ∨ x = x
      性质三:
      x1 ∨ \lor ∨ x2 >= max(x1,x2)

      取反(~)

      定义:各二进制位0变1,1变0。

      位左移(<<)、位右移(>>)

      x << n ,相当于x × \times × 2n
      x >> n, 相当于 x ÷ \div ÷ 2n

      状态压缩

      用int mask的二进制位代替一个bool数组v,此数组长度不超过31。第i位为1,表示v[i]=true;第i位为0,表示v[i]=false。
      mask&(1<<i) 表示mask第i为1。i ∈ \in ∈[0,31) 最低位i是0。以下操作,只影响第i位,不影响其它位。
      如果mask第i位无论是0还是1,设置为1 mask |=(1<<i)
      如果mask第i位是无论是1还是0,设置为0 mask &=~(1<<i)
      将mask的第一位取反(0变1,1变0)。 mask ^=(1 << i)

      子集状态压缩(枚举子集)

      从大到小枚举mask的子集,寻找下一个子集,如果sub为0,没有比它小的子集。否则从右到左寻找第一个不为0的位,假定此位是i1,将i1位减1,也就是变成0。i1后面的位取最大,也就是mask的后i1位。
      sub-1 :由于是从大到小枚举,所以(sub-1)比i1高的位和mask一致。
      第i1位变成0。
      比i1位低的全为1。
      故:mask&(sub-1)就是 比sub小的最大子集。
      注意:通过此方法枚举maxMask =(1<<n)-1所有子集的子集的时间复杂度是O(3n)。下面利用二项式定理。
      0被maxMask 所有子集枚举,共2n次。
      有且仅有一个二进位为1的数共有 ( n 1 ) n \choose 1 (1n​)个,被2n-1个子集枚举。除当前位必须是1,其它位01皆可。
      有且仅有2个二进位为1的数共有 ( n 2 ) n \choose 2 (2n​)个,被2n-2个子集枚举。
      ∑ i : 0 n ( n i ) 1 i 2 n − i = ( 1 + 2 ) n = 3 n 根据二项式定理 \sum_{i:0}^n{n \choose i}1^i2^{n-i}\\ =(1+2)^n = 3^n \quad 根据二项式定理 i:0∑n​(in​)1i2n−i=(1+2)n=3n根据二项式定理

      常见的运算

      x是正整数
      (x-1) & \And & x :将最低位的1设置成0。
      令第i1位是1,如果有多位是1,i1是最小的。

        比i1高的位 i1位 比第i1第的位
      x-1 和x相同 0 全为1
      x 不变 1 全为0

      比i1高的位:两者完全相同,故不变。
      i1位:一个为1,一个为1,故为0。
      比i1低的为:一个为1,一个为0,故全为0。

      (-x) & \And &x
      除最低位的1外,全部置成0。
      负数存储的是补码,反码+1.
      令第i1位是1,如果有多位是1,i1是最小的。

        比i1高的位 i1位 比第i1第的位
      -x的反码 和x相反 0 全为1
      -x的补码 和x相反 1 全为0
      x的原码 不变 1 全为0

      比i1高的位: x和-x相反,故全为0。
      i1位:x和-x都为1,故结果为1。
      比i1低的位: x和-x都为0,故结果为0。

      区间(子数组)位与(位或)模板

      vector<int> nums;
      

      t r = & x = l r n u m s [ x ] t_r= \Large\And_{x=l}^r nums[x] tr​=&x=lr​nums[x]
      集合s 记录所有的tr,则s的元素数量,最大31个。因为删除重复元素后,tr的二进制1至少少1个。

      位或类似,每个不重复的元素至少增加一个1。
      最大公约数,也是如此。每次至少除以2。

      vector<vector<pair<int, int>>> vNumIndex(nums.size());
      for (int i = 0; i < nums.size(); i++) {
      	if (i) {
      		for (const auto& [preNum, preIndex] : vNumIndex[i - 1]) {
      			const int iNew = preNum | nums[i];
      			if (vNumIndex[i].empty() || (vNumIndex[i].back().first != iNew)) {
      				vNumIndex[i].emplace_back(make_pair(iNew, preIndex));
      			}
      			else {
      				vNumIndex[i].back().second = preIndex;
      			}
      		}
      	}
      	if (vNumIndex[i].empty() || (vNumIndex[i].back().first != nums[i])) {
      		vNumIndex[i].emplace_back(make_pair(nums[i], i));
      	}
      	else {
      		vNumIndex[i].back().second = i;
      	}
      }
      

      vNumIndex[i]记录 nums[x…i]的异或值(不重复)及索引。重复值保留索引大的。x ∈ \in ∈[0,x]。

      第二个版本的模版

      class CRangCal {
      public:
      	template<class _Pr, class T = int>
      	static vector<vector<pair<T, int>>> RangCal(const vector<T>& nums, _Pr pr) {
      		vector<vector<pair<int, int>>> vNumIndex(nums.size());
      		for (int i = 0; i < nums.size(); i++) {
      			if (i) {
      				for (const auto& [preNum, preIndex] : vNumIndex[i - 1]) {
      					auto iNew = pr(preNum, nums[i]);
      					if (vNumIndex[i].empty() || (vNumIndex[i].back().first != iNew)) {
      						vNumIndex[i].emplace_back(make_pair(iNew, preIndex));
      					}
      					else {
      						vNumIndex[i].back().second = preIndex;
      					}
      				}
      			}
      			if (vNumIndex[i].empty() || (vNumIndex[i].back().first != nums[i])) {
      				vNumIndex[i].emplace_back(make_pair(nums[i], i));
      			}
      			else {
      				vNumIndex[i].back().second = i;
      			}
      		}
      		return vNumIndex;
      	}
      };
      

      0到x 1的数量

      class C1ToXBitCount {
      public:
      	C1ToXBitCount(int iBitCount = 60):m_iBitCount(iBitCount){}
      	long long TotalBitCount(long long x) {
      		auto v = BitCount(x);
      		return std::accumulate(v.begin(), v.end(), 0LL);
      	}
      	vector<long long> BitCount(long long x) {
      		vector<long long> ret(m_iBitCount);
      		auto cnt = x + 1;
      		for (int bit = 0; bit < m_iBitCount; bit++) {
      			long long halfUnit = (1LL << bit);
      			const auto curBitCount = cnt / 2 / halfUnit * halfUnit + max(0LL, cnt % (2 * halfUnit) - halfUnit);
      			ret[bit] = curBitCount;
      		}
      		return ret;
      	}
      	int  m_iBitCount = 0;
      };
      

      BitCount的返回值v,v[i]表示0到x第i位1的数量。

      例题

      模板题

      【位运算】3097. 或值至少为 K 的最短子数组 II
      【动态规划 区间dp 位运算】3117. 划分数组得到最小的值之和
      【线段树 区间位运算模板】3117划分数组得到最小的值之和

      拆位法

      【位运算 拆位法 二分】3007. 价值和小于等于 K 的最大数字
      【位运算 拆位法】1835. 所有数对按位与结果的异或和

      试填法

      【位运算 试填法】【推荐】3022. 给定操作次数内使剩余元素的或值最小
      【位运算 反证法 试填法】2897.对数组执行操作使平方和最大

      子集状态压缩(枚举子集)

      【位运算 子集状态压缩】982按位与为零的三元组
      【位运算 状态压缩 枚举子集】1178. 猜字谜
      【动态规划】【子集状态压缩】LCP04 覆盖

      其它

      【位运算】【二分查找】【C++算法】3007价值和小于等于 K 的最大数字
      【深度优化(DFS) 记忆化 位运算】:2920收集所有金币可获得的最大积分
      【二分查找】【位运算】2354.优质数对的数目
      【数论】【分类讨论】【位运算】1611使整数变为 0 的最少操作次数
      【动态规划】【位运算】1787. 使所有区间的异或结果为零

      【位运算】【脑筋急转弯】2749. 得到整数零需要执行的最少操作数
      【数学】【位运算】LeetCoce810. 黑板异或游戏
      【位运算】【 数学】【 哈希映射】2857. 统计距离为 k 的点对
      【并集查找 图论 位运算】3108. 带权图里旅途的最小代价
      【位运算 贪心】2835. 使子序列的和等于目标的最少操作次数
      【数学归纳法】【位运算】【异或】3068最大节点价值之和

      版权声明:本文内容来自第三方投稿或授权转载,原文地址:https://blog.csdn.net/he_zhidan/article/details/137808470,作者:闻缺陷则喜何志丹,版权归原作者所有。本网站转在其作品的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如因作品内容、版权等问题需要同本网站联系,请发邮件至ctyunbbs@chinatelecom.cn沟通。

      上一篇:C++算法:滑动窗口与双指针

      下一篇:【广度优先搜索】【拓扑排序】【C++算法】913. 猫和老鼠

      相关文章

      2025-05-16 09:15:17

      递归,搜索,回溯算法(3)之穷举,暴搜,深搜,回溯,剪枝

      递归,搜索,回溯算法(3)之穷举,暴搜,深搜,回溯,剪枝

      2025-05-16 09:15:17
      回溯 , 子集 , 数组 , 算法 , 递归
      2025-05-16 09:15:10

      C语言练习之猜名次-----A选手说:B第二,我第三;B选手说:我第二,E第四;C选手说:我第一,D第二;D选手说:C最后,我第三;E选手说:我第四,A第一;

      C语言练习之猜名次-----A选手说:B第二,我第三;B选手说:我第二,E第四;C选手说:我第一,D第二;D选手说:C最后,我第三;E选手说:我第四,A第一;

      2025-05-16 09:15:10
      amp , lt , 排名
      2025-05-14 10:33:31

      计算机初级选手的成长历程——操作符详解(2)

      计算机初级选手的成长历程——操作符详解(2)

      2025-05-14 10:33:31
      对象 , 操作 , 操作符 , 表达式 , 运算 , 逗号 , 逻辑
      2025-05-14 10:33:16

      30天拿下Rust之切片

      在Rust中,切片是一种非常重要的引用类型。它允许你安全地引用一段连续内存中的数据,而不需要拥有这些数据的所有权。切片不包含分配的内存空间,它仅仅是一个指向数据开始位置和长度的数据结构。

      2025-05-14 10:33:16
      amp , end , 切片 , 字符串 , 引用 , 索引 , 迭代
      2025-05-14 10:33:16

      30天拿下Rust之字符串

      在Rust中,字符串是一种非常重要的数据类型,用于处理文本数据。Rust的字符串是以UTF-8编码的字节序列,主要有两种类型:&str和String。其中,&str是一个对字符数据的不可变引用,更像是对现有字符串数据的“视图”,而String则是一个独立、可变更的字符串实体。

      2025-05-14 10:33:16
      amp , Rust , str , String , 使用 , 字符串 , 方法
      2025-05-14 10:07:38

      30天拿下Rust之枚举

      Rust中的枚举是一种用户定义的类型,它允许你为一组相关的值赋予友好的名称。在Rust中,枚举是强大的工具,它们不仅仅用于表示几个固定的值,还可以包含函数和方法,使得枚举成员可以有自己的行为。

      2025-05-14 10:07:38
      match , None , Rust , 代码 , 枚举 , 类型
      2025-05-14 10:03:05

      C++ 11新特性之完美转发

      在C++编程语言的演进过程中,C++ 11标准引入了一系列重大革新,其中之一便是“完美转发”机制。这一特性使得模板函数能够无损地传递任意类型的实参给其他函数或构造函数,从而极大地增强了C++在泛型编程和资源管理方面的灵活性与效率。

      2025-05-14 10:03:05
      amp , 函数 , 右值 , 引用 , 模板 , 类型
      2025-05-13 09:49:19

      表达式_运算符_expr计算

      表达式_运算符_expr计算

      2025-05-13 09:49:19
      基础知识 , 学习 , 实践 , 简单 , 运算
      2025-05-12 08:45:17

      子集

      给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。

      2025-05-12 08:45:17
      lt , nums , 子集 , 数组
      2025-05-08 09:03:29

      windows下mybatis插入mysql数据中文乱码问题解决

      windows下mybatis插入mysql数据中文乱码问题解决

      2025-05-08 09:03:29
      amp , ini , jdbc , mysql , 乱码
      查看更多
      推荐标签

      作者介绍

      天翼云小翼
      天翼云用户

      文章

      33561

      阅读量

      5243308

      查看更多

      最新文章

      C语言练习之猜名次-----A选手说:B第二,我第三;B选手说:我第二,E第四;C选手说:我第一,D第二;D选手说:C最后,我第三;E选手说:我第四,A第一;

      2025-05-16 09:15:10

      30天拿下Rust之枚举

      2025-05-14 10:07:38

      C++ 11新特性之完美转发

      2025-05-14 10:03:05

      C语言:自定义类型——联合和枚举

      2025-05-07 09:10:01

      C语言:深入理解指针(2)

      2025-05-07 09:09:52

      Matlab矩阵和数组的操作

      2025-05-07 09:08:08

      查看更多

      热门文章

      驱动开发:内核枚举ShadowSSDT基址

      2024-07-01 01:32:23

      驱动开发:内核枚举驱动内线程(答疑篇)

      2023-06-16 06:09:04

      驱动开发:内核特征码搜索函数封装

      2024-07-01 01:32:23

      Java的枚举类型用法介绍

      2023-06-01 06:30:49

      X64驱动:内核操作进线程/模块

      2023-07-20 06:06:15

      驱动开发:内核枚举进程与线程ObCall回调

      2024-07-01 01:31:30

      查看更多

      热门标签

      java Java python 编程开发 代码 开发语言 算法 线程 Python html 数组 C++ 元素 javascript c++
      查看更多

      相关产品

      弹性云主机

      随时自助获取、弹性伸缩的云服务器资源

      天翼云电脑(公众版)

      便捷、安全、高效的云电脑服务

      对象存储

      高品质、低成本的云上存储服务

      云硬盘

      为云上计算资源提供持久性块存储

      查看更多

      随机文章

      【Java】跳动爱心代码,百分百还原跳动的爱心!

      c语言回顾-联合和枚举

      C++算法:218城市天际线问题

      魔鬼数字:Java中的浮点数陷阱

      【C++笔试强训】

      【动态规划】【图论】【C++算法】1928规定时间内到达终点的最小花费

      • 7*24小时售后
      • 无忧退款
      • 免费备案
      • 专家服务
      售前咨询热线
      400-810-9889转1
      关注天翼云
      • 旗舰店
      • 天翼云APP
      • 天翼云微信公众号
      服务与支持
      • 备案中心
      • 售前咨询
      • 智能客服
      • 自助服务
      • 工单管理
      • 客户公告
      • 涉诈举报
      账户管理
      • 管理中心
      • 订单管理
      • 余额管理
      • 发票管理
      • 充值汇款
      • 续费管理
      快速入口
      • 天翼云旗舰店
      • 文档中心
      • 最新活动
      • 免费试用
      • 信任中心
      • 天翼云学堂
      云网生态
      • 甄选商城
      • 渠道合作
      • 云市场合作
      了解天翼云
      • 关于天翼云
      • 天翼云APP
      • 服务案例
      • 新闻资讯
      • 联系我们
      热门产品
      • 云电脑
      • 弹性云主机
      • 云电脑政企版
      • 天翼云手机
      • 云数据库
      • 对象存储
      • 云硬盘
      • Web应用防火墙
      • 服务器安全卫士
      • CDN加速
      热门推荐
      • 云服务备份
      • 边缘安全加速平台
      • 全站加速
      • 安全加速
      • 云服务器
      • 云主机
      • 智能边缘云
      • 应用编排服务
      • 微服务引擎
      • 共享流量包
      更多推荐
      • web应用防火墙
      • 密钥管理
      • 等保咨询
      • 安全专区
      • 应用运维管理
      • 云日志服务
      • 文档数据库服务
      • 云搜索服务
      • 数据湖探索
      • 数据仓库服务
      友情链接
      • 中国电信集团
      • 189邮箱
      • 天翼企业云盘
      • 天翼云盘
      ©2025 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
      公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
      • 用户协议
      • 隐私政策
      • 个人信息保护
      • 法律声明
      备案 京公网安备11010802043424号 京ICP备 2021034386号