自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(103)
  • 资源 (2)
  • 收藏
  • 关注

原创 python爬取商品评论

【代码】python爬取商品评论。

2023-02-01 11:40:37 447 1

原创 10.04-Augmentation-Free Self-Supervised Learning on Graphs

图对比学习

2022-10-12 10:55:15 515

原创 3389. N 的阶乘

输入一个正整数 N,输出 N 的阶乘。 输入格式 输入包含多组测试数据。 每组数据占一行,包含一个整数 N。 输出格式 每组数据输出占一行,输出 N 的阶乘。 数据范围 1≤N≤1000, 每个输入最多包含 100 组数据 输入样例: 4 5 15 输出样例: 24 120 1307674368000 高精度乘法,N最大只有1000,先预处理阶乘 #include<iostream> #include<vector> using namespace std; const int N=

2022-05-07 15:58:21 291

原创 3388. 求root(N, k)

N<k 时,root(N,k)=N,否则,root(N,k)=root(N′,k)。 N′ 为 N 的 k 进制表示的各位数字之和。 输入 x,y,k,输出 root(xy,k) 的值。 输入格式 输入包含多组测试数据。 每组数据占一行,包含三个整数 x,y,k。 输出格式 每组数据输出一行,root(xy,k) 的值。 数据范围 每个输入最多包含 100 组测试数据。 0<x,y<2×109, 2≤k≤6, 注意 xy 可能会溢出 int 范围。 输入样例: 4 4 10 输出样例:

2022-05-07 14:08:59 442

原创 3384. 二叉树遍历

编写一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的先序遍历字符串: abc##de#g##f### 其中 # 表示的是空格,空格字符代表空树。 建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。 输入格式 共一行,包含一个字符串,表示先序遍历字符串。 输出格式 共一行,输出将输入字符串建立二叉树后中序遍历的序列,字符之间空格隔开。 注意,输出中不用包含 #。 数据范围 输入字符串长度不超过 100,且只包含小写字母和 #。 输入样例: abc#

2022-05-07 10:59:01 1136

原创 5.最小邮票

有若干张邮票,要求从中选取最少的邮票张数凑成一个给定的总值。 如,有 1 分,3 分,3 分,3 分,4 分五张邮票,要求凑成 10 分,则使用 3 张邮票:3 分、3 分、4 分即可。 输入格式 第一行包含整数 M,表示需要凑成的邮票总值。 第二行包含整数 N,表示给定邮票数量。 第三行包含 N 个整数,表示每个邮票的面值,以升序排列。 输出格式 输出能够凑成总值 M 所需的最少邮票张数。 若无解,则输出 0。 数据范围 1≤M≤100, 1≤N≤20, 每张邮票的面值范围 [1,100]。 输入样例:

2022-04-28 10:48:39 179

原创 4.玛雅人的密码

玛雅人有一种密码,如果字符串中出现连续的 2012 四个数字就能解开密码。 给定一个长度为 N 的字符串,该字符串中只含有 0,1,2 三种数字。 可以对该字符串进行移位操作,每次操作可选取相邻的两个数字交换彼此位置。 请问这个字符串要移位几次才能解开密码。 例如 02120 经过一次移位,可以得到 20120,01220,02210,02102,其中 20120 符合要求,因此输出为 1。 如果无论移位多少次都解不开密码,输出 −1。 输入格式 第一行包含一个整数 N,表示字符串的长度。 第二行包含一个由

2022-04-28 09:44:01 144

原创 3.整数拆分

一个整数总可以拆分为 2 的幂的和。 例如:7 可以拆分成 7=1+2+4,7=1+2+2+2,7=1+1+1+4,7=1+1+1+2+2, 7=1+1+1+1+1+2,7=1+1+1+1+1+1+1 共计 6 种不同拆分方式。 再比如:4 可以拆分成:4=4,4=1+1+1+1,4=2+2,4=1+1+2。 用 f(n) 表示 n 的不同拆分的种数,例如 f(7)=6。 要求编写程序,读入 n,输出 f(n)mod109。 输入格式 一个整数 n。 输出格式 一个整数,表示 f(n)mod109。 数据范

2022-04-27 17:09:46 162

原创 2.手机键盘

请你计算按照手机键盘(9 键输入法)输入字母的方式,键入给定字符串(由小写字母构成)所花费的时间。 具体键入规则和花费时间如下描述: 对于同一键上的字符,例如 a,b,c 都在 “1” 键上,输入 a 只需要按一次,输入 c 需要连续按三次。 如果连续两个字符不在同一个按键上,则可直接按,如:ad 需要按两下,kz 需要按 6 下。 如果连续两字符在同一个按键上,则两个按键之间需要等一段时间,如 ac,在按了 a 之后,需要等一会儿才能按 c。 现在假设每按一次需要花费一个时间段,等待时间需要花费两个时间

2022-04-27 16:09:56 225

原创 1.进制转换

将一个长度最多为 30 位数字的十进制非负整数转换为二进制数输出。 输入格式 输入包含多组测试数据。 每组测试数据占一行,包含一个长度不超过 30 位的十进制非负整数。 输出格式 每组数据输出一个结果,占一行,为输入对应的二进制数。 数据范围 输入最多包含 100 组测试数据。 输入样例: 0 1 3 8 输出样例: 0 1 11 1000 高精度除法+辗转相除 #include<bits/stdc++.h> using namespace std; string a; vector<in

2022-04-27 10:42:38 55

原创 作物杂交(DFS)

作物杂交 作物杂交是作物栽培中重要的一步。 已知有 N 种作物 (编号 1 至 N),第 i 种作物从播种到成熟的时间为 Ti。 作物之间两两可以进行杂交,杂交时间取两种中时间较长的一方。 如作物 A 种植时间为 5 天,作物 B 种植时间为 7 天,则 AB 杂交花费的时间为 7 天。 作物杂交会产生固定的作物,新产生的作物仍然属于 N 种作物中的一种。 初始时,拥有其中 M 种作物的种子 (数量无限,可以支持多次杂交)。 同时可以进行多个杂交过程。 求问对于给定的目标种子,最少需要多少天能够得到。 如存

2022-04-06 12:01:19 482 1

原创 和谐宿舍(贪心+二分)

和谐宿舍 我的某室友学过素描,墙上有n张他的作品。这些作品都是宽度为1,高度不定的矩形,从左到右排成一排,且底边在同一水平线上。   宿舍评比就要来了,为了及格,我们决定买不多于m块的矩形木板,把这些作品和谐掉。要求木板也从左到右排成一排,且底边与作品的底边在同一水平线上。   在能够把所有作品和谐掉的前提下,我们希望最大的那块木板的面积最小,问最大木板的面积。 输入格式   第一行两个数n和m,表示作品数和木板数;   第二行n个数Hi,表示从左到右第i个作品的高度。 输出格式   一行一个数ans,表

2022-04-04 18:49:05 841

原创 打包(二分+贪心)

打包 Lazy有N个礼物需要打成M个包裹,邮寄给M个人,这些礼物虽然很便宜,但是很重。Lazy希望每个人得到的礼物的编号都是连续的。为了避免支付高昂的超重费,他还希望让包裹的最大重量最小。 二分思路:最大重量的最小值必然是在单个礼物的最大值和所有礼物的重量和之间,我们要在这个区间保证礼物能够分成M份,且这个重量最小。 int l=max_w,r=sum; while(l<r) { int mid=l+r >>1; //如果mid重量能够分成小于m份,说明有更小的mid,区间往左压缩

2022-04-04 15:34:55 495

原创 求乘法逆元

已知a*x≡1(mod m) ,求a的逆元 解法1:若m是质数,可用快速幂求解 int qmi(int a, int b, int p) { int res=1; while(b) { if(b&1) res=1ll*res*a%p; b>>=1; a=1ll*a*a%p; } return res; } //a的逆元:x=a^m-2 int x=qmi(a,m-2,m); 解法2:若m不是质数,只能用扩展欧几里得算法 //扩展欧几里得求逆元 int exgcd

2022-02-24 09:50:20 66

原创 839.模拟堆

维护一个集合,初始时集合为空,支持如下几种操作: I x,插入一个数 x; PM,输出当前集合中的最小值; DM,删除当前集合中的最小值(数据保证此时的最小值唯一); D k,删除第 k 个插入的数; C k x,修改第 k 个插入的数,将其变为 x; 现在要进行 N 次操作,对于所有第 2 个操作,输出当前集合的最小值。 输入格式 第一行包含整数 N。 接下来 N 行,每行包含一个操作指令,操作指令为 I x,PM,DM,D k 或 C k x 中的一种。 输出格式 对于每个输出指令 PM,输出一个结果,

2022-01-27 16:27:12 101

原创 19.堆排序

堆中根节点存储的是最小值,每一个节点的左右儿子都是大于或等于该节点。 插入元素: 将新元素插在最后,heap[++size]=x,再依次与其父节点比较,若该元素小于其父节点,则和父节点交换位置,循环直到正确位置。 删除元素: 用最后一个元素覆盖要删除的元素,并删除最后一个元素,heap[k]=heap[size–], 再通过down和up操作到正确位置。 修改元素: heap[k]=x,再执行down和up操作。 对于父节点x,其左儿子为2x,右儿子为2x+1;(从1开始) // h[N]存储堆中的值, h

2022-01-27 16:24:24 67

原创 240.食物链

动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形。 A 吃 B,B 吃 C,C 吃 A。 现有 N 个动物,以 1∼N 编号。 每个动物都是 A,B,C 中的一种,但是我们并不知道它到底是哪一种。 有人用两种说法对这 N 个动物所构成的食物链关系进行描述: 第一种说法是 1 X Y,表示 X 和 Y 是同类。 第二种说法是 2 X Y,表示 X 吃 Y。 此人对 N 个动物,用上述两种说法,一句接一句地说出 K 句话,这 K 句话有的是真的,有的是假的。 当一句话满足下列三条之一时,这句

2022-01-27 16:12:10 103

原创 836. 合并集合

一共有 n 个数,编号是 1∼n,最开始每个数各自在一个集合中。 现在要进行 m 个操作,操作共有两种: M a b,将编号为 a 和 b 的两个数所在的集合合并,如果两个数已经在同一个集合中,则忽略这个操作; Q a b,询问编号为 a 和 b 的两个数是否在同一个集合中; 输入格式 第一行输入整数 n 和 m。 接下来 m 行,每行包含一个操作指令,指令为 M a b 或 Q a b 中的一种。 输出格式 对于每个询问指令 Q a b,都要输出一个结果,如果 a 和 b 在同一集合内,则输出 Yes,否

2022-01-26 13:35:17 62

原创 18.并查集

基本操作: 1.将两个集合合并 2.查询两个集合是否在同一个集合中 基本原理:每个集合用一颗树来表示,树根的编号就是整个集合的编号,每个节点存储它的父节点,p[x]表示x的父节点。对于根结点,p[x]=x。 问题1:如何判断树根,看根节点x是否等于p[x] 问题2:如何查询元素所属的集合编号,从该元素向上搜索,直至找到根节点。 递归方式: int find(int x) { if(p[x]!=x) p[x]=find(p[x]); return p[x]; } 循环方式: int find

2022-01-26 13:33:44 177

原创 17.Tire树

维护一个字符串集合,支持两种操作: I x 向集合中插入一个字符串 x; Q x 询问一个字符串在集合中出现了多少次。 共有 N 个操作,输入的字符串总长度不超过 105,字符串仅包含小写英文字母。 维护一个字符串集合,支持两种操作: I x 向集合中插入一个字符串 x; Q x 询问一个字符串在集合中出现了多少次。 共有 N 个操作,输入的字符串总长度不超过 105,字符串仅包含小写英文字母。 输入格式 第一行包含整数 N,表示操作数。 接下来 N 行,每行包含一个操作指令,指令为 I x 或 Q x 中

2022-01-26 11:57:01 79

原创 831.KMP字符串

给定一个模式串 S,以及一个模板串 P,所有字符串中只包含大小写英文字母以及阿拉伯数字。 模板串 P 在模式串 S 中多次作为子串出现。 求出模板串 P 在模式串 S 中所有出现的位置的起始下标。 输入格式 第一行输入整数 N,表示字符串 P 的长度。 第二行输入字符串 P。 第三行输入整数 M,表示字符串 S 的长度。 第四行输入字符串 S。 输出格式 共一行,输出所有出现位置的起始下标(下标从 0 开始计数),整数之间用空格隔开。 数据范围 1≤N≤105 1≤M≤106 输入样例: 3 aba 5 a

2022-01-25 17:10:18 813

原创 154.滑动窗口

给定一个大小为 n≤106 的数组。 有一个大小为 k 的滑动窗口,它从数组的最左边移动到最右边。 你只能在窗口中看到 k 个数字。 每次滑动窗口向右移动一个位置。 以下是一个例子: 该数组为 [1 3 -1 -3 5 3 6 7],k 为 3。 窗口位置 最小值 最大值 [1 3 -1] -3 5 3 6 7 -1 3 1 [3 -1 -3] 5 3 6 7 -3 3 1 3 [-1 -3 5] 3 6 7 -3 5 1 3 -1 [-3 5 3] 6 7 -3 5 1 3 -1 -3 [5 3 6] 7

2022-01-25 11:49:31 80

原创 830.单调栈

给定一个长度为 N 的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出 −1。 输入格式 第一行包含整数 N,表示数列长度。 第二行包含 N 个整数,表示整数数列。 输出格式 共一行,包含 N 个整数,其中第 i 个数表示第 i 个数的左边第一个比它小的数,如果不存在则输出 −1。 数据范围 1≤N≤105 1≤数列中元素≤109 输入样例: 5 3 4 2 7 5 输出样例: -1 3 -1 2 2 如何构建一个单调栈 每当有一个数i,如果栈顶元素比i大,那么该元素后面都不可能会用到,因为已经有

2022-01-25 11:30:23 334

原创 17.单调栈和单调队列

单调栈 常见模型:找出每个数左边离它最近的比它大/小的数 int tt = 0; for (int i = 1; i <= n; i ++ ) { while (tt && check(stk[tt], i)) tt -- ; stk[ ++ tt] = i; } 单调队列 常见模型:找出滑动窗口中的最大值/最小值 int hh = 0, tt = -1; for (int i = 0; i < n; i ++ ) { while (hh <= t

2022-01-25 11:23:37 132

原创 16.栈和队列

栈 // tt表示栈顶 int stk[N], tt = 0; // 向栈顶插入一个数 stk[ ++ tt] = x; // 从栈顶弹出一个数 tt -- ; // 栈顶的值 stk[tt]; // 判断栈是否为空 if (tt > 0) { } 队列 //hh表示队头,tt表示队尾 int q[N],hh=0,tt=-1 //入队 q[++t]=x; //出队 hh++; //队头 q[hh]; //看队列是否为空 if(hh<=tt) { } 循环队列 // hh 表示队头,

2022-01-24 11:37:49 187

原创 15.数组模拟双链表

// e[]表示节点的值,l[]表示节点的左指针,r[]表示节点的右指针,idx表示当前用到了哪个节点 int e[N], l[N], r[N], idx; // 初始化 void init() { //0是左端点,1是右端点 r[0] = 1, l[1] = 0; idx = 2; } // 在节点a的右边插入一个数x void insert(int a, int x) { e[idx] = x; l[idx] = a, r[idx] = r[a]; l

2022-01-24 11:26:30 232

原创 14.数组模拟单链表

//head表示头指针,e[N]表示当前节点的值,ne[N]表示当前节点的next指针,idx表示当前用到哪个节点 int head, e[N],ne[N],idx; void init() { head=-1; idx=0; } //在链表头插入一个元素 void insert(int a) { e[idx]=a; ne[idx]=head; head=idx++; } //删除头结点 void remove() { head=ne[head]; } ...

2022-01-24 11:01:12 59

原创 788.逆序对的数量

逆序对的数量 【题目描述】** 给定一个序列有n个数,求n个数中逆序对的个数,逆序对的定义:i < j && a[i] > a[j]。 【输入格式】 第一行包含整数 n 第二行包含 n 【输出格式】 输出一个整数,表示逆序对的个数。 【数据范围】 1≤n≤100000 【输入样例】 6 2 3 4 5 6 1 【输出样例】 5 解法 本质还是归并排序,对于左右两段有序序列 如果 a[i] > a[j] ,那么i到mid之间的数都大于 a[j] ,则其中的逆序对数量为 mi

2022-01-21 14:39:06 296

原创 1922. 懒惰的牛

1922. 懒惰的牛 这是一个炎热的夏日。 懒洋洋的奶牛贝茜想将自己放置在田野中的某个位置,以便可以在短距离内尽可能多地吃到美味的草。 贝茜所在的田野中共有 N 片草地,我们可以将田野视作一个一维数轴。 第 i 片草地中包含 gi 单位的青草,位置坐标为 xi。 不同草地的位置不同。 贝茜想选取田野中的某个点作为她的初始位置(可能是某片草地所在的点)。 只有一片草地与她的初始位置的距离不超过 K 时,贝茜才能吃到那片草地上的草。 如果贝茜选择最佳初始位置,请确定她可以吃到的青草最大数量。 输入格式 第一行包

2022-01-21 10:40:30 296

原创 800.数组元素的目标和

给定两个升序排序的有序数组A和B,以及一个目标值x。数组下标从0开始。 请你求出满足A[i] + B[j] = x的数对(i, j)。 数据保证有唯一解。 输入格式 第一行包含三个整数n,m,x,分别表示A的长度,B的长度以及目标值x。 第二行包含n个整数,表示数组A。 第三行包含m个整数,表示数组B。 输出格式 共一行,包含两个整数 i 和 j。 数据范围 数组长度不超过100000。 同一数组内元素各不相同。 1≤数组元素≤109 输入样例: 4 5 6 1 2 4 7 3 4 6 8 9 输出样例:

2022-01-19 17:20:40 330

原创 13.区间合并

1.按照区间左端点排序 2.区间有如下几种情况: (1)区间1包含区间2 (2)区间1和区间2有交集,即区间2的左端点<=区间1的右端点。 (3)区间1和区间2没有交集,即区间2的左端点>区间1的右端点。 typedef pair<int,int> PII; void merge(PII &segs) { sort(segs.begin(), segs.end());//排序 vector<PII> res;//用来存储合并后的区间 int st=-2e9,

2022-01-19 16:03:38 56

原创 802.区间和

区间和 假定有一个无限长的数轴,数轴上每个坐标上的数都是0。 现在,我们首先进行 n 次操作,每次操作将某一位置x上的数加c。 近下来,进行 m 次询问,每个询问包含两个整数l和r,你需要求出在区间[l, r]之间的所有数的和。 输入格式 第一行包含两个整数n和m。 接下来 n 行,每行包含两个整数x和c。 再接下里 m 行,每行包含两个整数l和r。 输出格式 共m行,每行输出一个询问中所求的区间内数字和。 数据范围 −109≤ x ≤109, 1≤ n,m ≤105, −109≤ l ≤ r ≤109,

2022-01-19 14:02:07 88

原创 12.离散化

对于一个值域很大的数组,如109,里面只包含稀疏的元素,我们没办法直接开辟一个一样大的数组来遍历对数组中的元素进行操作,这时我们就需要进行离散化处理。 比如对于一个109的数组,我们要操作的只有下面5个元素 我们可以用vector存取上述该元素的所有索引 [ 1,2,10,100,10000 ] 现在的数组空间就变成vector.size(); 接下来我们只需要用二分法对每一个索引进行定位,求出对应离散化的值 这样我们就将需要操作的元素映射到一个低维数组。 代码模板: vector<int>

2022-01-19 12:09:57 204

原创 11.位运算

求一个数n的二进制表示的第k位是多少 n>>k&1 求一个二进制数n中1的个数: n&-n = n&(~n+1) int lowbit(int n) { return n&-n;//返回最末尾的1 } int count=0; while(n) { n-=lowbit(n); count++; }

2022-01-19 10:33:56 39

原创 10.双指针

先使用暴力求解,再看i,j之间是否有联系进行优化 for (int i = 0, j = 0; i < n; i ++ ) { while (j < i && check(i, j)) j ++ ; // 具体问题的逻辑 } 练习题:最初不重复子序列

2022-01-19 09:49:38 166

原创 最长不重复子序列

双指针 指针i,j一开始都在初始位置,i固定,j右移,对j经过的字符我们标识该字符出现的次数,当出现重复字符时,j固定,i移动到该字符出现的第一次的下一个位置,同时将移动过程经过的字符次数减1 const int N=100010; int S[N]={0}; int res = 0; for (int j = 0, i = 0; j < s.size(); j ++ ) { S[s[j]] ++ ;//标识该字符出现次数 while (i < j && S[s.

2022-01-18 18:04:13 368

原创 9.一维差分和二维差分

一维差分 an=b1+b2+·······+bn,a是前缀和数组,b是差分数组 bn=an-an-1 要在原数组某个区域[l,r]加上c,只需要 b[l]+=c; b[r+1]-=c; void insert(int l,int r,int c) { b[l]+=c; b[r+1]-=c } //前缀和 for(int i=1;i<=n;i++) b[i]+=b[i-1]; 二维差分 在(x1,y1),(x2,y2)的区域加上c, void insert(int x1,int y1,int x

2022-01-18 15:31:06 55

原创 8.二维前缀和

#include<iostream> const int N=1010; int n,m,q; int a[N][N],s[N][N]; int main() { scanf("%d%d%d",&n,&m,&q); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) scanf("%d",a[i][j]); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++

2022-01-17 17:55:59 231

原创 7.高精度除法

高精度整数A 低精度整数b 从被除数高位开始,被除数=余数*10+下一位 #include<iostream> #include<algorithm> #include<vector> using namespace std; vector<int> div(vector<int> &A,int b,int &r) { r=0; vector<int> C; for(int i=A.size()

2022-01-17 16:13:43 86

原创 6.高精度乘法I

A是大数,b是小数。方法与加分类似,用A的每一位乘b,t/10记录进位,t%10保留个位。 #include<iostream> #include<vector> using namespace std; vector<int> mul(vector<int> &A,int B) { vector<int> C; int t=0; for(int i=0;i<A.size() || t;i++) {

2022-01-17 15:22:19 67

Towards A Novel Architecture for Enabling Interoperability Amongst Multiple Bloc

Towards A Novel Architecture for Enabling Interoperability Amongst Multiple Blockchains论文笔记

2021-02-21

A Multiple Blockchains Architecture On Inter-Blockchain Communication.pdf

A Multiple Blockchains Architecture On Inter-Blockchain Communication.pdf

2021-02-09

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除