- 博客(30)
- 收藏
- 关注
原创 asyncio gather函数的用法
asyncio.gather()是Python的异步库中的一个函数,用于并发执行多个协程。它封装了多个协程,使这些协程可以并发执行,等待所有协程执行结束后才返回结果,并将所有协程的返回值合并到一个列表中返回。比如,如果我们有两个函数func1和func2,我们可以使用asyncio.gather(func1(), func2())来并发执行它们。这个函数会一直运行,直到所有的协程都执行完成。每个协程可以使用await来暂停执行并将控制权交给其他协程,这使得协程可以在等待IO操作完成的同时,运行其他代码
2023-07-14 15:41:28 3268
原创 asyncio底层逻辑
本文主要介绍了Python中的迭代器和asyncio模块。迭代器是Python中的一个重要概念,用于处理数据流,可以将多个迭代器串联起来,形成数据流,每次只能通过一个数据。生成器函数是一种特殊的迭代器,可以将一个函数等价于一个对象,每次迭代返回yield后面的数据,并在函数结束时抛出StopIteration。使用yield可以简化定义可迭代数据类型时需要定义迭代器的过程。在协程中,可以使用send语句向函数传入参数,但最好只使用send,因为第一次迭代必须使用send(None)。
2023-07-13 22:10:29 239
原创 AtCoder Beginner Contest 226
AtCoder Beginner Contest 226 - AtCoderB - Counting Arrays这个题目就是看有几个不同的序列,然后可以使用哈希来做,然后用mapmapmap来存,sum=sum∗137+47+a[i]sum=sum*137+47+a[i]sum=sum∗137+47+a[i],然后这样子貌似就可以过了,然后其实还可以转换成字符串,将空格转换成逗号然后再放在mapmapmap里面去重,或者用setsetset也行的,听说用vectorvectorvector存起来,然后
2021-11-09 19:43:53 199
原创 Codeforces Round #746 (Div. 2)
Hemose Shopping可以注意到有一些数字是可以与别人换位置的,有一些是不能的,然后可以与别人换位置的还有这样一个性质,aaa和bbb不能换,但是他们两个都可以和ccc换,所以可以通过媒介来将aaa,bbb来换位置,所以第一个不能换位置的开始的位置就是max(1,n−x+1)max(1,n-x+1)max(1,n−x+1),结束的位置就是min(x,n)min(x,n)min(x,n).这个区间的数不能挪动位置,所以先排序,然后看看这个区间的每个数是不是原来的就行了#include<cst
2021-10-13 20:59:38 127
原创 Codeforces Round #747 (Div. 2)
Consecutive Sum Riddle因为lll可以是负数,而且这个题是一个AAA题,所以必然是一个比较∗∗**∗∗的构造题,因为lll可以是负数,所以可以存在抵消的操作,所以就直接输出−n+1,n-n+1,n−n+1,n就行了.#include<cstdio>#include<algorithm>#include<cstring>#define int long longusing namespace std;int T,n;signed main
2021-10-13 20:54:53 124
原创 数据结构基本模板复习
这就一篇简短模板博客,没有什么解说的,就是一些注意事项,准备后期写一点技巧性的东西比如线段树合并,李超线段树,动态开点,010101线段树,用于维护乘法数论,二维的树,分块,莫队,线段树优化建图,lctlctlct之类的,看情况学习一点点其他的奇怪的树或者说图(像仙人掌这种).模板1: 并查集三个核心函数int getf(int x){return fa[x]==x?x:getf(fa[x]);}void merge(int v,int u){ int temp1,temp2; temp1=ge
2021-09-15 17:06:29 214
原创 Codeforces Global Round 16
MIN-MEX Cut我们发现,所有的111都可以直接切出来,把它单独弄,因为只有111的集合mex=0mex=0mex=0,加起来就相当于没有,只是这个000要注意一下,分情况就好了全是111,答案就是000,全是000,答案就是111.000只有连续的一段,答案就是111,因为111的那部分等于000,只用看000这一段000有连续的很多段,大于等于222段.这种情况答案就是222了不可能答案大于222,因为所有看作一个,答案最多就是222.#include<cstdio>
2021-09-15 16:36:27 195
原创 Codeforces Round #742 (Div. 2)
MEXor Mixupmexmexmex意思就是不在集合里面最小的正整数.所以给出一个mexmexmex那么他前面的所有的东西都是要选上的,然后前面的这些所有的异或之和(假设为xxx)就可以预处理然后用O1O1O1的计算出来,因为给出的必须异或和为yyy,所以我们还差一个z=x xor yz=x\ xor \ yz=x xor y,也就是z xor x=yz \ xor \ x=yz xor x=y,然后就是分情况了:z=
2021-09-14 20:56:44 109
原创 整除分块
引入问题:∑i=1n⌊ni⌋\sum_{i=1}^n\lfloor \frac{n}{i}\rfloor∑i=1n⌊in⌋,其中n<=109n<=10^9n<=109暴力:for(int i=1;i<=n;i++) ans+=n/i;//有手就行这个的时间复杂度是n2n^2n2正解:i/ji/ji/j最终的答案一定是单调递减的而且可能还有一段是连续的一段数字.比如202020除下来的结果就是20,10,6,5,4,3,2,2,2,2,1,1,1,1,1,1,1,
2021-09-01 22:33:24 503 8
原创 并查集
模板: 并查集三个核心函数int getf(int x){return fa[x]==x?x:getf(fa[x]);}void merge(int v,int u){ int temp1,temp2; temp1=getf(v); temp2=getf(u); if(temp2<temp1) swap(temp2,temp1); if(temp1!=temp2) fa[temp2]=temp1;}bool find(int u,int v){ int temp1,temp2;
2021-08-23 22:46:17 231 2
原创 斜率优化dp
斜率优化例题1:洛谷P2365 任务安排我们先使用前缀和的方式,将t[i]t[i]t[i]和c[i]c[i]c[i]预处理,f[i]f[i]f[i]表示前面iii个整好之后的花费,然后得到方程式:f[i]=minj=0i−1{f[j]+t[i]∗(c[i]−c[j])+s∗(c[n]−c[j])}f[i]=min_{j=0}^{i-1}\{f[j]+t[i]*(c[i]-c[j])+s*(c[n]-c[j]) \}f[i]=minj=0i−1{f[j]+t[i]∗(c[i]−c[j])+s∗
2021-08-21 22:35:12 99
原创 [学习笔记] 背包九讲
01背包问题题目:有NNN件物品和一个容量为VVV的背包。第iii件物品的费用是c[ic[ic[i],价值是w[i]w[i]w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。解答f[i][v]f[i][v]f[i][v]表示前面iii个物品放进空间为vvv的背包获得的最大收益f[i][v]=max(f[i−1][v],f[i−1][v−c[i]]+w[i])f[i][v]=max(f[i-1][v],f[i-1][v-c[i]]+w[i])f[i][v]=m
2021-08-21 22:26:28 185
原创 UCF Local Programming Contest Final Round2020
d - Food Display Arrangement就是贪心,设这些数字的起点和终点分别是lil_ili和rir_iri,假设已经进行完删除操作了,那么剩下的数字种类就是越多越好,所以贪心的选择更多的“线段”.(可以跑最长路,但是我没调出来)#include<cstdio>#include<algorithm>#include<cstring>#include<map>#define maxn 100100using namespace
2021-08-19 22:26:01 241
原创 ICPC Mid-Central USA Region 2019
b - Convoy首先根据贪心来说,肯定让更熟悉城市的人来开车,即tit_iti小的人,所以先对所有的时间进行排序然后再来考虑怎么求答案的问题,由于每个人的tit_iti都有可能不同,所以说有时候一个人跑完两圈了,另外一个人可能一圈都没有跑完,所以直接求答案可能会有一定的难度.考虑二分出需要多少时间(x)(x)(x),然后每次来checkcheckcheck一下这个时间行不行,用x/a[i]x/a[i]x/a[i]得到可以走几趟,单数趟和双数趟是不一样的,因为单数是到了体育场,双数是家,a[i
2021-08-19 20:12:25 483 8
原创 Codeforces Round #739 (Div. 3)
D - Make a Power of Two题目关键信息: 随便删除,只能在右边加,前导零不自动删除因为要看看到底操作几次就可以变得和2k (0≤k≤63)2^k\ \ (0\le k\le 63)2k (0≤k≤63)相等,拿到题我们就先想暴力一点的做法,判断时间复杂度,再考虑优化.所以最暴力的就是直接枚举2k2^k2k,再与nnn来作比较,看看需要操作几次计算时间复杂度:104∗63∗910^4*63*9104∗63∗9<108−910^{8-
2021-08-19 17:05:50 148
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人