旋转卡壳——合并凸包

分治算法与凸包问题 凸包问题是计算几何中的经典问题。给定二维平面上的点集,凸包是一个最小的凸多边形,它包含了点集中所有的点。你可以把凸包想象成一根松紧带将所有点紧紧包裹住的样子,凸包的边缘仅沿着最外面的点延伸。分治算法是解决复杂问题的强大策略,它的思想是将问题分解为多个子问题,分别解决这些子问题后再合并得到最终解。凸包问题可以通过分治算法高效地解决,时间复杂度可以达到 (O(n \log n))。分解(Divide):将点集按 x 坐标排序,并递归地将点集分为左右两部分。求解(Conquer) 阅读详情

合并凸包

考虑如下问题: 给定两个凸多边形, 包含他们并的最小凸多边形是怎样的? 答案即合并凸包后得到的凸多边形。

合并凸包可以通过一个低效的方式实现: 给定两个多边形的所有顶点, 计算这些点对应的凸包。 更高效的方法是存在的, 他依赖于多边形间的 桥 的查找。 下图描述了这个概念: 

两个不相交的凸多边形。 合并后的凸包包含两个多边形中的凸包链(途中蓝色粗实线), 通过多边形间的桥进行连接(途中蓝色虚线)


给定两个不相交的多边形, 在多边形间存在两条桥。 多边形相交时, 拥有和顶点数同样数量的桥, 如下图所示: 

两个相交的凸多边形。 合并凸包只包含多边形间的桥(图中虚线所示)。 存在连接八个顶点的八个桥。


合并操作的核心是分治方法。 他同样用于多边形中。 一个获取凸包的十分简单的方法是将点集分为两部分, 分别计算两个较小点集的凸包, 并且将他们合并。 每个集合再次被分割, 直到元素的个数足够小(比如说三个或者更少) 因此凸包就能被很容易获得了。
Toussaint 提出利用旋转卡壳来寻找两个凸多边形间的桥。 这个方法的主要优点在于其利用回溯, 并且多边形可以交叠(其他的算法要求多边形不相交)。 下述结论是他的算法的主要过程:
给定凸多边形 P = { p(1) , ... , p( m) } 和 Q = { q(1) , ... , q( n) },一个点对 ( p( i), q( j)) 形成 P 和 Q 之间的桥当且仅当:
  1. (p(i), q(j)) 形成一个并踵点对。
  2. p(i-1), p(i+1), q(j-1), q(j+1) 都位于由 (p(i), q(j)) 组成的线的同一侧。
假设多边形以标准形式给出并且顶点是以顺时针序排列, 算法如下:
  1. 分别计算 P 和 Q 拥有最大 y 坐标的顶点。 如果存在不止一个这样的点, 取 x 坐标最大的。
  2. 构造这些点的遂平切线, 以多边形处于其右侧为正方向(因此他们指向 x 轴正方向)。
  3. 同时顺时针旋转两条切线直到其中一条与边相交。 得到一个新的并踵点对 (p(i), q(j)) 。 对于平行边的情况, 得到三个并踵点对。
  4. 对于所有有效的并踵点对 (p(i), q(j)): 判定 p(i-1), p(i+1), q(j-1), q(j+1) 是否都位于连接点 (p(i), q(j)) 形成的线的同一侧。 如果是, 这个并踵点对就形成了一个桥, 并标记他。
  5. 重复执行步骤3和步骤4直到切线回到他们原来的位置。
  6. 所有可能的桥此时都已经确定了。 通过连续连接桥间对应的凸包链来构造合并凸包。
上述的结论确定了算法的正确性。 运行时间受步骤1,5,6约束。 他们都为 O(N) 运行时间( N 是顶点总数)。 因此算法拥有现行的时间复杂度。

一个凸多边形间的桥实际上确定了另一个有用的概念:多边形间公切线。 同时, 桥也是计算凸多边形交的算法核心。


原文地址:http://cgm.cs.mcgill.ca/~orm/mergech.html

转载请注明出处,谢谢!


分治算法之凸包问题 先排序,再递归分解,再合并局部凸包。归纳了递归求解与合并过程的正确性,并证明合并过程的时间复杂度为 O(n)。O(nlog⁡n)利用Graham-scan算法是合并阶段的核心,通过不断调整候选点保证最终合并的凸包是最优解。 阅读详情

相关推荐

计算几何——凸包问题(上下凸包法)原理及可视化实现

引言:利用归并排序实现凸包算法 merge sort: 看了这个图一定能回忆起归并排序分而治之的思想,我们为什么不把点集也进行均匀划分去求每一个小的凸包,进而去逐步合成大的凸包呢?说起来容易做起来不要忽略难点和细节:如何由两个子凸包合成一个凸包呢?这里我们主要实现这个步骤。 原理 (1)既然要把点集进行均匀划分去求每一个小的凸包,进而去逐步合成大的凸包,所以我们有必要去进行一个排序,这里我们采取的是x轴正方向排序: bool cmp(Point a, Point b) { if (a.x == b

derbi123123的博客 2267

计算几何-凸包(2)

找凸包的O(nlgn)算法 归约 已知问题A的复杂度,未知问题B,如果A的输入能在O(n)时间内转成B的输入,B求解后的输出可以在O(n)时间内转为A的输出,则B>=A,即B的下界为A garham sacn 算法:O(nlgn) 找出LIL 对其余的点按照极角排序(toLeft),O(nlgn) 构造两个栈,按如下代码,最终S即为所求,O(n) def scan: S = deque([1,2]) T = deque([3,4,...,n]) while len(T) &

qq_41039430的博客 409

凸包+旋转卡壳专题

洛谷P2742 求凸包周长 #include<bits/stdc++.h> using namespace std; const int MAX=1e4+1; const double eps=1e-8; struct point { double x,y; point(){} point(double a,double b) { ...

Qianyri的博客 1250

利用分治法解决凸包问题

凸包的意思就是包含所有给定点的凸多边形。 ![这里写图片描述](http://img.blog.youkuaiyun.com/20170530091726010?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMzYyNDYzNzE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gra

K.Sun 1万+

探索凸多边形的几何特性与算法应用

本文探讨了凸多边形在计算几何中的重要应用,特别是最小面积外接矩形问题的解决方法。通过旋转卡壳技术,提出了一种高效算法,该算法仅需线性时间复杂度即可计算出凸多边形的最小面积外接矩形。此外,文章还介绍了凸多边形的最小周长外接矩形问题,以及三角剖分中“剥洋葱皮”操作的概念。通过这些算法,我们能够更高效地处理几何数据,为计算机图形学和相关领域提供了实用的解决方案。

weixin_33670640的博客 420

微信聊天记录数据库解密实战:从WCDB到sqlcipher4的关键步骤解析

本文详细解析了微信桌面版聊天记录数据库的解密实战过程。通过逆向分析,定位了微信从WCDB框架到sqlcipher4加密的关键步骤,并成功提取了数据库密钥。文章重点介绍了如何通过动态调试、字符串定位等方法,追踪并验证sqlcipher4的加密密钥,最终实现对加密数据库文件的解密操作,为安全研究和数据恢复提供了技术参考。

weixin_29322553的博客 1071

旋转卡壳——目录页

一些历史:1978年, M.I. Shamoss Ph.D. 的论文"Computational Geometry"标志着计算机科学的这一领域的诞生。 当时他发表成果的是一个寻找凸多边形直径的一个非常简单的算法, 即根据多边形的一对点距离的最大值来确定。 后来直径演化为由一对对踵点对来确定。 Shamos提出了一个简单的 O(n) 时间的算法来确定一个凸 n 角形的对踵点对。 因为他们最多只有

ACMaker的专栏 8229

挑战第七天:Llamaindex RAG 实践

安装python 依赖包,并安装 Llamaindex和相关包以及Sentence Transformer 模型。进入开发机后,创建新的conda环境,命名为。镜像,然后在资源配置中,使用。的选项,然后立即创建开发机器。后,点击 选择镜像 使用。然后安装相关基础依赖。

weixin_53579823的博客 728

旋转卡壳法总结

以下所有文章均转载( http://blog.youkuaiyun.com/acmaker/article/details/3176910) 转载请注明出处!  1、旋转卡壳——翻译说明文档   前一段时间看了一位国外大牛的网站,是关于旋转卡壳技术的,内容很不错,就尝试着翻译一下。      关于旋转卡壳技术,最早是在刘汝佳、黄亮的《算法艺术与信息学竞赛》上看到的,是计算几何相关的技术,开始觉得很神奇,

天亮说晚安 2325

Camera AF和FF

Camera按对焦功能可以分为FF(Fixed Focus)和AF(Auto Focus),即固定对焦和自动对焦。固定对焦顾名思义就是焦距是固定的,而自动对焦可以通过移动镜头位置来改变焦距从而实现自动对焦。以前摄像的功能机大多是固定对焦,现在的手机都带有自动对焦功能。 FF模组包括镜头(Lens),传感器(Sensor),红外滤色器(IR Filter),电路板(PCB),镜头支撑(Lens Holder),连接器(Connector)。 Fig 1. FF Module AF模组包括FF模组,音圈马达(V

Coppa的博客 1万+

FastApi教程

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于万维网(WWW:World Wide Web )服务器与本地浏览器之间传输超文本的传送协议。HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。

小石潭记丶 1561

旋转卡壳总结

[+] 目录(?)[+] 以下所有文章均转载(http://blog.youkuaiyun.com/acmaker/article/details/3176910) 转载请注明出处! 1、旋转卡壳——翻译说明文档 前一段时间看了一位国外大牛的网站,是关于旋转卡壳技术的,内容很不错,就尝试着翻译一下。 关于旋转卡壳技术,最早是...

weixin_30371469的博客 133

BU61580芯片实战:手把手教你配置1553B通信的BC端寄存器(含代码解析)

本文详细解析了BU61580芯片在1553B通信中的BC端寄存器配置方法,包括关键寄存器功能映射、初始化代码解析及回环测试实现。通过实战案例和代码示例,帮助开发者快速掌握1553B通信的核心技术,提升系统稳定性和通信质量。

a1b2c的博客 223

旋转卡壳算法(转载)

from:http://blog.youkuaiyun.com/hanchengxi/article/details/8639476 一、目录 一些历史: 1978年, M.I. Shamos's Ph.D. 的论文"Computational Geometry"标志着计算机科学的这一领域的诞生。 当时他发表成果的是一个寻找凸多边形直径的一个非常简单的算法, 即根据多边形的一对点距离的最大值来确定。...

weixin_30732825的博客 116

YOLOv8改进策略【损失函数篇】| 2024 引进Focaler-IoU损失函数 加强边界框回归 (Focaler-DIoU、Focaler-GIoU、Focaler-CIoU)

本文记录的是改进YOLOv8的损失函数,将其替换成。现有研究通过利用边界框之间的几何关系来提高回归性能,但忽略了困难样本和简单样本分布对边界框回归的影响。不同检测任务中困难样本和简单样本的分布不同,对于简单样本占主导的检测任务,关注简单样本的边界框回归有助于提高检测性能;对于困难样本比例较高的检测任务,需要关注困难样本的边界框回归。,提高检测器在不同检测任务中的性能。实现的。

Limiiiing的博客 1221

【异常】Hermes Agent调用z.ai接口失败(余额不足)API call failed (attempt 1/3): RateLimitError [HTTP 429]

补充说明:同步尝试解析接口对应网页时,出现“网页解析失败,可能是不支持的网页类型,请检查网页或稍后重试”提示,该提示不影响核心报错排查,仅作为辅助信息。

奶爸的编程之路,也就一周冷个三天 1194

旋转卡壳算法

转自:http://blog.youkuaiyun.com/acmaker/article/details/3188177 一、目录 一些历史: 1978年, M.I. Shamos's Ph.D. 的论文"Computational Geometry"标志着计算机科学的这一领域的诞生。 当时他发表成果的是一个寻找凸多边形直径的一个非常简单的算法, 即根据多边形的一对点距离的最大值来确定。

风云龙儿的专栏 2万+

5G 模组 FM650 USB模式查询及网络配置

完成以上配置后,5G模组可进行搜网,入网成功后,上位机获取 5G IP。

十年通信老兵的技术修炼之路——从3G到5G,从地面基站到卫星通信。 1323

五大高难度算法精讲:动态规划、最大流、KMP、凸包与并查集

算法是计算机科学的核心基础,其本质是通过定义明确的计算步骤来解决问题。核心原理在于通过高效的数据结构与策略,在有限资源内找到最优或可行的解,其技术价值在于提升软件性能、解决复杂工程问题。在搜索引擎、社交网络、路径规划、资源调度等应用场景中,算法都发挥着关键作用。本文聚焦于五大公认的高难度算法:动态规划(如多维背包问题)、图论中的最大流/最小割、字符串匹配的KMP与后缀自动机、计算几何的凸包与旋转卡壳,以及并查集的高级应用。掌握这些算法,能帮助开发者深入理解最优子结构、网络流、自动机等核心思想,并有效应对Le

weixin_33226548的博客 299

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

补题:HOJ第二场Base Stations(UVALive-7825) (凸包)

题目链接: UVALive-7825 题目大意: 给你n个不同类型的点的坐标,求不同类型点之间最大距离为多少? 解题思路: 由于点好多好多,所以之间暴力的话,肯定会TLE!!! 所以我们需要先求出每种类型的凸包(用求凸包算法模板就好了),这样可以减少一些点之间距离的计算。 此时如果我们直接拿两个凸包中的点两两去求距离,然后取最大,发现还是会TLE!!! 因此我们需要继续减少不必要的...

永不止步的博客 263

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

旋转卡壳介绍

一、目录 一些历史: 1978年, M.I. Shamos's Ph.D. 的论文"Computational Geometry"标志着计算机科学的这一领域的诞生。 当时他发表成果的是一个寻找凸多边形直径的一个非常简单的算法, 即根据多边形的一对点距离的最大值来确定。  后来直径演化为由一对对踵点对来确定。 Shamos提出了一个简单的 O(n) 时间的算法来确定一个凸 n 角形的对踵点

蘑菇--走在通往梦想的道路上。 686

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

上一篇: 旋转卡壳——四边形剖分
下一篇: 旋转卡壳——找公切线
ACMaker
博客等级 码龄20年 72粉丝 0原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值