【第二学期第五周学习记录】

P3842 [TJOI2007] 线段

题目描述

在一个 n × n n \times n n×n 的平面上,在每一行中有一条线段,第 i i i 行的线段的左端点是 ( i , L i ) (i, L_{i}) (i,Li),右端点是 ( i , R i ) (i, R_{i}) (i,Ri)

你从 ( 1 , 1 ) (1,1) (1,1) 点出发,要求沿途走过所有的线段,最终到达 ( n , n ) (n,n) (n,n) 点,且所走的路程长度要尽量短。

更具体一些说,你在任何时候只能选择向下走一步(行数增加 1 1 1)、向左走一步(列数减少 1 1 1)或是向右走一步(列数增加 1 1 1)。当然,由于你不能向上行走,因此在从任何一行向下走到另一行的时候,你必须保证已经走完本行的那条线段。

输入格式

第一行有一个整数 n n n

以下 n n n 行,在第 i i i 行(总第 ( i + 1 ) (i+1) (i+1) 行)的两个整数表示 L i L_i Li R i R_i Ri

输出格式

仅包含一个整数,你选择的最短路程的长度。

输入输出样例 #1

输入 #1

6
2 6
3 4
1 3
1 2
3 6
4 5

输出 #1

24

说明/提示

我们选择的路线是

 (1, 1) (1, 6)
 (2, 6) (2, 3)
 (3, 3) (3, 1)
 (4, 1) (4, 2)
 (5, 2) (5, 6)
 (6, 6) (6, 4) (6, 6)

不难计算得到,路程的总长度是 24 24 24

对于 100 % 100\% 100% 的数据中, n ≤ 2 × 1 0 4 n \le 2 \times 10^4 n2×104 1 ≤ L i ≤ R i ≤ n 1 \le L_i \le R_i \le n 1LiRin

思路

线性dp

  • 要走完一层的方法一共两种:要么从左端点开始走到右端点;要么从右端点开始走到左端点;
  • 那么我们统计每一层这两种可能性的最小值;
  • 直到最后的时候选择两种可能的最小值作为答案即可;
  • 需要说明一个点:我们不能在每一层都选出最小值,直接使用贪心的方法;

代码

#include<bits/stdc++.h>
using namespace std;
#define int long long

const int N=2e4+3;
int r[N],l[N],dp[N][2];

signed main()
{
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>l[i]>>r[i];
	}
	dp[1][0]=r[1]+r[1]-l[1]-1;
	dp[1][1]=r[1]-1;
	for(int i=2;i<=n;i++){
		dp[i][0]=min(dp[i-1][0]+abs(r[i]-l[i-1])+r[i]-l[i]+1,
					dp[i-1][1]+abs(r[i]-r[i-1])+r[i]-l[i]+1);
		dp[i][1]=min(dp[i-1][0]+abs(l[i]-l[i-1])+r[i]-l[i]+1,
					dp[i-1][1]+abs(l[i]-r[i-1])+r[i]-l[i]+1);
	}
	int ans=min(dp[n][0]+n-l[n],dp[n][1]+n-r[n]);
	cout<<ans;
	return 0;
} 

P10908 [蓝桥杯 2024 国 B] 选数概率

题目描述

一个数组中有 a a a 1 1 1 b b b 2 2 2 c c c 3 3 3。设 P i , j P_{i,j} Pi,j 表示在数组中随机选取两个数,其中一个数为 i i i,另一个数为 j j j 的概率。比如 P 1 , 2 = a b C ( a + b + c , 2 ) P_{1,2} = \dfrac{ab}{C(a+b+c,2)} P1,2=C(a+b+c,2)ab,其中 C ( N , M ) C(N, M) C(N,M) 为组合数,表示从 N N N 个不同元素中任取 M M M 个的方案数。

a = ? , b = ? , c = ? a=\text{?},b=\text{?},c=\text{?} a=?,b=?,c=? 时,满足 P 1 , 2 = 517 2091 , P 2 , 3 = 2632 10455 , P 1 , 3 = 308 2091 P_{1,2}=\dfrac{517}{2091},P_{2,3}=\dfrac{2632}{10455},P_{1,3}=\dfrac{308}{2091} P1,2=2091517,P2,3=104552632,P1,3=2091308,且 a + b + c a + b + c a+b+c 最小。保证 a + b + c a + b + c a+b+c 最小的解是唯一的。

你需要提交一个格式为 a , b , c a,b,c a,b,c 的字符串。例如假设你计算的结果是 a = 12 , b = 34 , c = 56 a =12, b = 34, c = 56 a=12,b=34,c=56,那么你需要提交的字符串是 12,34,56

输入格式

这是一道结果填空题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

输出格式

这是一道结果填空题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

思路

其实这个直接按照题目描述循环判断就好;唯一需要注意的点可能就是判断数字时不是==;可以%==0就可以了;

代码

#include<bits/stdc++.h>
using namespace std;
#define int long long

int C(int m,int n)//先写了一个关于组合数的计算()
{
	int s1=1,s2=1;
	for(int i=m;i>=m-n+1;i--){
		s1*=i;
	}
	for(int i=1;i<=n;i++){
		s2*=i;
	}
	return s1/s2;
}
signed main()
{
	int a,b,c;
	int s=456;
	for(int i=1;i<=150;i++){
		for(int j=1;j<=150;j++){
			for(int m=1;m<=150;m++){
				if((C(i+j+m,2)%10455==0)&&(i*j%2585==0)&&(j*m%2632==0)&&(i*m%1540==0)){
				//就是说这里:判断条件是能够被整除就可以啦;
					int ss=i+j+m;
					if(ss<s){
						s=ss;a=i;b=j;c=m;
					}		
				}
			}
		}
	}
	cout<<a<<","<<b<<","<<c;
	return 0;
} 

P10909 [蓝桥杯 2024 国 B] 立定跳远

题目描述

在运动会上,小明从数轴的原点开始向正方向立定跳远。项目设置了 n n n 个检查点 a 1 , a 2 , ⋯   , a n a_1, a_2, \cdots , a_n a1,a2,,an a i ≥ a i − 1 > 0 a_i \ge a_{i−1} > 0 aiai1>0。小明必须先后跳跃到每个检查点上且只能跳跃到检查点上。同时,小明可以自行再增加 m m m 个检查点让自己跳得更轻松。

在运动会前,小明制定训练计划让自己单次跳跃的最远距离达到 L L L,并且学会一个爆发技能可以在运动会时使用一次,使用时可以在该次跳跃时的最远距离变为 2 L 2L 2L。小明想知道, L L L 的最小值是多少可以完成这个项目?

输入格式

输入共 2 2 2 行。

第一行为两个正整数 n , m n,m n,m

第二行为 n n n 个由空格分开的正整数 a 1 , a 2 , ⋯   , a n a_1, a_2, \cdots, a_n a1,a2,,an

输出格式

输出共 1 1 1 行,一个整数表示答案。

输入输出样例 #1

输入 #1

5 3
1 3 5 16 21

输出 #1

3

说明/提示

【样例说明】

增加检查点 10 , 13 , 19 10, 13, 19 10,13,19,因此每次跳跃距离为 1 , 2 , 2 , 5 , 3 , 3 , 3 , 2 1,2, 2, 5, 3, 3, 3, 2 1,2,2,5,3,3,3,2,在第三次跳跃时使用技能即可。

【评测用例规模与约定】

对于 20 % 20\% 20% 的评测用例,保证 n ≤ 1 0 2 n \le 10^2 n102 m ≤ 1 0 3 m \le 10^3 m103 a i ≤ 1 0 3 a_i \le 10^3 ai103
对于 100 % 100\% 100% 的评测用例,保证 2 ≤ n ≤ 1 0 5 2 \le n \le 10^5 2n105 m ≤ 1 0 8 m \le 10^8 m108 0 < a i ≤ 1 0 8 0 < a_i \le 10^8 0<ai108

思路

  1. 使用二分答案;
  2. 理论上能够添加的检查点越多,他的最大跨度值就越小;
  3. 因此我们可以通过判断(check)每次二分之后的需要添加的检查点与可以添加的检查点的数量的大小来判断二分结果是否是我们需要的值;
  4. 一个小小的(我当时卡了很久的)问题:关于最远跳跃距离是2L这个点怎么处理的问题;
  5. 事实上,在check的时候每到达一个点我们需要添加的检查点数就会++;有一个可以跳2L,其实就是少++一次;也就是给我们正常统计的需要添加的检查点数量-1即可;

代码

#include <bits/stdc++.h>
using namespace std;

const int N=1e5+12;
int a[N];//a数组记录每个检查点的位置;
int b[N];//b数组记录每两个检查点之间的距离;
int n,m;

bool check(int mid)
{
	int mm=0;
	//在假设的他能够跳跃的最大值的情况下,需要增加的检查点数;
	for(int i=1;i<=n;i++){
		if(b[i]>mid){
		//如果一段距离大于mid(目前假设的他能够跳跃的最大值),需要增加的检查点数就要增加;
			if(b[i]%mid==0)	mm+=(b[i]/mid)-1;
			else	mm+=b[i]/mid;
		}
	}
	return (mm-1)<=m;
}
int search_min()
{
	int l=1,r=b[n];//跳跃长度最大为距离的最大值;
	while(l<r){
		int mid=l+r>>1;
		if(check(mid))	r=mid;
		else	l=mid+1;
	}
	return r;
}
signed main()
{
	
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}	
	a[0]=0;
	for(int i=1;i<=n;i++){
		b[i]=a[i]-a[i-1];
	}	
	sort(b+1,b+n+1);
	//找到间隙的最大值;
	int ans=search_min();
	cout<<ans;
	return 0;
}

养成游戏

题目描述

在这里插入图片描述

思路

  1. 这道题用dfs;
  2. 具有多少层是由有多少个属性决定的;
  3. 每个底下有多少选项是由K来决定的;
  4. 以及一些需要注意的小点,备注在代码里边了;

代码

#include<bits/stdc++.h>
using namespace std;
#define int long long

const int N=102;
int ii[N],jj[N],op[N],a[N],b[N],d[N],v[N];
int n,m,k;
int vis[9];//用来记录每个属性的得分;
int maxx=-1;

void dfs(int u)
//u表示当前正在判断的第u个属性;
{
	if(u==n+1){
	//当每个属性都被赋分之后(搜索完一支之后);
		int ans=0;
		for(int i=1;i<=m;i++){
			if(op[i]==0)
				if(a[i]*vis[ii[i]]+b[i]*vis[jj[i]]<=d[i])	ans+=v[i];
			if(op[i]==1)
				if(a[i]*vis[ii[i]]+b[i]*vis[jj[i]]>=d[i])	ans+=v[i];	
		}
		maxx=max(ans,maxx);
		return ;
	}
	for(int i=0;i<=k;i++){
	//这里的循环一定是要从0开始!!!然后一直到k!!!
		vis[u]=i//当前第u个属性的得分为i;
		dfs(u+1);//继续假设下一个属性的得分;
	}
}
signed main()
{
	cin>>n>>m>>k;
	for(int t=1;t<=m;t++){
		cin>>ii[t]>>jj[t]>>op[t]>>a[t]>>b[t]>>d[t]>>v[t];
	}
	dfs(1);
	cout<<maxx;
	return 0;
}

AT_abc250_a [ABC250A] Adjacent Squares

题目描述

有一个 h 行 w 列的网格,给出其中一个网格的坐标 (x,y) (表示该网格在第 x 行第 y 列),问在网格图中有多少与该网格有边相邻的正方形。

输入格式

入力は以下の形式で標準入力から与えられる。

H W
R C

输出格式

答えを整数として出力せよ。

输入输出样例 #1

输入 #1

3 4
2 2

输出 #1

4

输入输出样例 #2

输入 #2

3 4
1 3

输出 #2

3

输入输出样例 #3

输入 #3

3 4
3 4

输出 #3

2

输入输出样例 #4

输入 #4

1 10
1 5

输出 #4

2

输入输出样例 #5

输入 #5

8 1
8 1

输出 #5

1

输入输出样例 #6

输入 #6

1 1
1 1

输出 #6

0

说明/提示

制約

  • 输入中的所有值均为整数。
  • 1≤R≤H≤10
  • 1≤C≤W≤10

思路

正常情况下都是四个,特判一下特殊情况即可;

代码

#include<bits/stdc++.h>
using namespace std;

int main()
{
	int n,m,a,b;
	cin>>n>>m>>a>>b;
	if(n==1&&m==1)	cout<<"0";
	else if(n==1||m==1){
		if(n==1){
			if(b!=1&&b!=m)	cout<<"2";
			else	cout<<"1";
		}
		if(m==1){
			if(a!=1&&a!=n)	cout<<"2";
			else	cout<<"1";
		}
	}
	else{
		if((a==1&&b==1)||(a==1&&b==m)||(a==n&&b==1)||(a==n&&b==m))	cout<<"2";
		else if(a==1||a==n||b==1||b==m)	cout<<"3";
		else	cout<<"4";	
	}
	return 0;
}

AT_abc250_b [ABC250B] Enlarged Checker Board

题目描述

以下是由纵 A 行、横 B 列的格子组成的瓷砖,将其以纵 N 行、横 N 列的方式排列后,形成的一个纵 (A x N) 列、横 (B x N) 行的格子图 X 。

对于满足 1<=i,j<=n 的 i, j ,将从上到第 i 行、从左到第 j 列的瓷砖称为瓷砖 (i,j) 。

格子图 $ X $ 的每个格子按照以下规则进行涂色:

• 每个瓷砖要么是白色瓷砖,要么是黑色瓷砖
• 白色瓷砖的所有格子均为白色,黑色瓷砖的所有格子均为黑色。
• 瓷砖 (1,1) 是白色瓷砖。
• 相邻的两个瓷砖(即满足 |a-c| + |b-d| = 1 的瓷砖 (a,b) 和 (c,d) ,其中 |x| 表示 x 的绝对值)颜色不同。

请按照指定的输出格式输出格子图 X 。

输入格式

入力は以下の形式で標準入力から与えられる。

N A B

输出格式

满足以下条件的 ( A × N ) (A \times N) (A×N) 个字符串 S 1 , … , S A × N S_1, \ldots, S_{A \times N} S1,,SA×N 需要按换行符分隔输出:

S 1 , … , S A × N S_1, \ldots, S_{A \times N} S1,,SA×N 各自是由 .# 组成的长度为 ( B × N ) (B \times N) (B×N) 的字符串。
• 对于每个 i , j i, j i,j 1 ≤ i ≤ A × N , 1 ≤ j ≤ B × N 1 \leq i \leq A \times N, 1 \leq j \leq B \times N 1iA×N,1jB×N),如果网格 X X X 中第 i i i 行、第 j j j 列的格子是白色(被涂白),则 S i S_i Si 的第 j j j 个字符为 .;如果是黑色(被涂黑),则为 #

输入输出样例 #1

输入 #1

4 3 2

输出 #1

..##..##
..##..##
..##..##
##..##..
##..##..
##..##..
..##..##
..##..##
..##..##
##..##..
##..##..
##..##..

输入输出样例 #2

输入 #2

5 1 5

输出 #2

.....#####.....#####.....
#####.....#####.....#####
.....#####.....#####.....
#####.....#####.....#####
.....#####.....#####.....

输入输出样例 #3

输入 #3

4 4 1

输出 #3

.#.#
.#.#
.#.#
.#.#
#.#.
#.#.
#.#.
#.#.
.#.#
.#.#
.#.#
.#.#
#.#.
#.#.
#.#.
#.#.

输入输出样例 #4

输入 #4

1 4 4

输出 #4

....
....
....
....

说明/提示

制約

1 ≤ N , A , B ≤ 10 1 \leq N, A, B \leq 10 1N,A,B10
• 输入均为整数

思路

那就按照题目说的打印好了()

代码

#include<bits/stdc++.h>
using namespace std;

int main()
{
	int n,a,b;
	cin>>n>>a>>b;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=a;j++){
			if(i%2==1){
			for(int t=1;t<=n;t++){
				for(int k=1;k<=b;k++){
					if(t%2==0)	cout<<"#";
					else	cout<<".";
				}
			}
			cout<<"\n"; 	
			}
			else{
			for(int t=1;t<=n;t++){
				for(int k=1;k<=b;k++){
					if(t%2==0)	cout<<".";
					else	cout<<"#";
				}
			}
			cout<<"\n";
			}
		}
	}
	return 0;
}

AT_abc250_c [ABC250C] Adjacent Swaps

题目描述

【题意翻译】

N N N 个球左右排成一列。开始,从左到右的第 i ( 1 ≤ i ≤ N ) i (1 \le i \le N) i(1iN) 个球写着整数 i i i

高桥君进行了 Q Q Q 回的操作。第 i ( 1 ≤ i ≤ Q ) i (1 \le i \le Q) i(1iQ) 次操作如下:

  • j j j N N N 个球中写着整数 x i x_i xi 的球的位置
  • 如果 j = N j = N j=N,将其与第 j − 1 j - 1 j1 个球交换;否则,与第 j + 1 j + 1 j+1 个球交换

求操作后的球上分别写着的数字(从左到右输出)。

输入格式

第一行为 N N N, Q Q Q.
i + 1 i+1 i+1 行为 a i a_i ai.

输出格式

从左到右输出操作后的球上分别写着的数字.

输入输出样例 #1

输入 #1

5 5
1
2
3
4
5

输出 #1

1 2 3 5 4

输入输出样例 #2

输入 #2

7 7
7
7
7
7
7
7
7

输出 #2

1 2 3 4 5 7 6

输入输出样例 #3

输入 #3

10 6
1
5
2
9
6
6

输出 #3

1 2 3 4 5 7 6 8 10 9

思路

  • 首先暴力循环肯定是不行的;
  • 那么问题的关键就是可以快速找到写着i数字的求的位置;
  • 我们可以开两个数组:一个记录每个位置上的球的编号;一个记录某编号球所对应的位置;

代码

#include<bits/stdc++.h>
using namespace std;
#define int long long

const int N=2e5+12;
int a[N],w[N];//a[位置]=数值;w[数值]=位置; 
signed main()
{
	int n,q;
	cin>>n>>q;
	for(int i=1;i<=n;i++){
		a[i]=i;w[i]=i;
	}
	while(q--){
		int x;
		cin>>x;
		int p1=w[x];
		int p2;
		if(p1==n)	p2=p1-1;
		else	p2=p1+1;
		swap(a[p1],a[p2]);
		swap(w[a[p1]],w[a[p2]]);
	}
	for(int i=1;i<=n;i++)	cout<<a[i]<<" ";
	return 0;
} 

AT_abc250_d [ABC250D] 250-like Number

题目描述

满足以下条件的整数 k 被称为“类 250 的数”:

•k 用素数 p<q 表示为 k=p×q ^3 。

在 N 以下的“类 250 的数”一共有多少个?

输入格式

入力は以下の形式で標準入力から与えられる。

N

输出格式

答えを整数として出力せよ。

输入输出样例 #1

输入 #1

250

输出 #1

2

输入输出样例 #2

输入 #2

1

输出 #2

0

输入输出样例 #3

输入 #3

123456789012345

输出 #3

226863

说明/提示

制約

  • N N N 是 1 至 1 0 18 10^{18} 1018 之间的整数。

Sample Explanation 1

• 因为 54 = 2 × 3 3 54 = 2\times3^3 54=2×33,所以它是“类似于250的数”。
• 因为 250 = 2 × 5 3 250 = 2\times5^3 250=2×53,所以它是“类似于250的数”。
250以下的“类似于250的数”只有以上这两个。

思路

  1. 先用质数筛筛出从2到n所有的质数并且将它们放入动态数组prime中;
  2. 然后由小到大去让prime中的质数去当p,通过二分答案去找在每个p条件下有多少个q符合题目要求;
  3. 每次用ans+=符合条件的数目即可;

代码

#include <bits/stdc++.h>
using namespace std;
#define int long long

const int N=1e6;

int n;
int vis[N+1];
vector<int> prime;

bool check(int mid,int i)
{
	__int128 a=prime[i];
	__int128 b=prime[mid];
	return a*b*b*b<=n;
}

int search_max(int i)
{
	int l=i,r=prime.size()-1;
	while(l<r){
		int mid=l+r+1>>1;
		if(check(mid,i))	l=mid;
		else	r=mid-1;
	}
	return l;
}

signed main()
{
	cin>>n;
	for(int i=2;i<=N;i++){
		if(vis[i]==1)	continue;
		prime.push_back(i);
		for(int j=i+i;j<=N;j+=i){
			vis[j]=1;
		}
	}
	int ans=0;
	for(int i=0;i<prime.size();i++){
		int ll=search_max(i);
	//	cout<<i<<" "<<ll;
		ans+=ll-i;
	}
	cout<<ans;
	return 0;
} 

P2074 危险区域

题目背景

一个恐怖组织在一座城市中安放了定时炸弹,其威力巨大,现在这里的警长想知道最坏的情况下会有多少街区受威胁。

题目描述

在一个城市有 N × M N \times M N×M 个街区,每个街区由坐标描述,如图所示:

1 1 1 2 2 2 3 3 3 ⋯ \cdots M M M
1 1 1 ( 1 , 1 ) (1,1) (1,1) ( 1 , 2 ) (1,2) (1,2) ( 1 , 3 ) (1,3) (1,3) ⋯ \cdots ( 1 , M ) (1,M) (1,M)
2 2 2 ( 2 , 1 ) (2,1) (2,1) ( 2 , 2 ) (2,2) (2,2) ( 2 , 3 ) (2,3) (2,3) ⋯ \cdots ( 2 , M ) (2,M) (2,M)
3 3 3 ( 3 , 1 ) (3,1) (3,1) ( 3 , 2 ) (3,2) (3,2) ( 3 , 3 ) (3,3) (3,3) ⋯ \cdots ( 3 , M ) (3,M) (3,M)
⋮ \vdots ⋱ \ddots
N N N ( N , 1 ) (N,1) (N,1) ( N , 2 ) (N,2) (N,2) ( N , 3 ) (N,3) (N,3) ⋯ \cdots ( N , M ) (N,M) (N,M)

现在已知有一个恐怖组织在其中的一个街区安放了定时炸弹,其威力为 t t t,即所有到这个街区的直线距离小于等于 t t t 的街区都会受威胁,已知有 k k k 个可能的炸弹安放位置,现在这里的警长想知道最坏的情况下会有多少街区受威胁。

输入格式

第一行四个正整数 n , m , k , t n,m,k,t n,m,k,t

接下来 k k k 行每行两个正整数 x i , y i x_i,y_i xi,yi,描述每个可能安放炸弹的街区。

输出格式

一个正整数为在最坏情况下有多少街区会受威胁。

输入输出样例 #1

输入 #1

4 5 3 2
1 2
3 4
4 5

输出 #1

11

说明/提示

数据规模与约定

对于 20 % 20\% 20%的数据 k = 1 k=1 k=1

对于 50 % 50\% 50% 的数据 1 ≤ n , m ≤ 1000 1 \le n,m \le 1000 1n,m1000 1 ≤ k ≤ 20 1 \le k \le 20 1k20 1 ≤ t ≤ 100 1\le t \le 100 1t100

对于 100 % 100\% 100% 的数据 1 ≤ n , m ≤ 1 0 5 1 \le n,m \le 10^5 1n,m105 1 ≤ k ≤ 50 1 \le k \le 50 1k50 t ≤ 300 t \le 300 t300

fixed by @ Cppsteve \color{#5EB95E}{\textsf{Cppsteve}} Cppsteve

思路

  1. 感觉最好想的方法似乎是枚举;
  2. 枚举范围的方法是从大佬哪里学来的,感觉好好用QWQ();
  3. 特别需要注意的可能就是1需要写成1LL;

代码

#include<bits/stdc++.h>
using namespace std;
#define int long long

const int N=1e5;
int maxx=-1;
signed main()
{
	int n,m,k,t;
	cin>>n>>m>>k>>t;
	while(k--){
		int a,b;
		cin>>a>>b;
		int ans=0;
		for(int i=max(1LL,a-t);i<=min(n,a+t);i++){
			for(int j=max(1LL,b-t);j<=min(m,b+t);j++){
				if(sqrt((a-i)*(a-i)+(b-j)*(b-j))<=t)	ans++;
			}
		}
		maxx=max(maxx,ans);
	}
	cout<<maxx;
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值