导航菜单

CCF

难度

难度呈幂次增长 第一题难度n,第二题难度\(n^2\),第三题难度\(n^3\) etc.第一题:一般是数值方面的问题(一群整数)基本一个for或者两个for循环可以解决第二题:正常思路是:最少得需要两个For循环,要说两个For循环也不难,难就难在两个for就超时,例如2020-12-2期末预测之最佳阈值,还有2021-04-2邻域均值,都用了前缀和来减少时间复杂度,这里可以学习一下前缀和第三题:一般会是字符串的处理,而且一般是对复杂文本的处理,这里最好使用C++里边的String类做字符串处理,如果要自己用c语言写字符串处理函数,不仅不一定写对,而且还会相当麻烦,浪费时间。第四题:一般会用到高等数据结构,比如树、图,而且需要用到的算法也不是课本上学到的简单算法,得用更高级一点的时间、空间效率更高一点的算法。第五题:一般是纯粹的算法题。但是算法难度一般是ACM级别的,所以经过ACM训练的训练员也不一定能拿满分。

好文推荐

代码优化加速:https://mp.weixin.qq.com/s/vsMSjkxWpNnHtdFH7BaEAQPython 内置的数据结构如str, tuple, list, set, dict底层都是 C 实现的,速度非常快,自己实现新的数据结构想在性能上达到内置的速度几乎是不可能的。

list类似于 C++ 中的std::vector,是一种动态数组。其会预分配一定内存空间,当预分配的内存空间用完,又继续向其中添加元素时,会申请一块更大的内存空间,然后将原有的所有元素都复制过去,之后销毁之前的内存空间,再插入新元素。删除元素时操作类似,当已使用内存空间比预分配内存空间的一半还少时,会另外申请一块小内存,做一次元素复制,之后销毁原有大内存空间。因此,如果有频繁的新增、删除操作,新增、删除的元素数量又很多时,list的效率不高。此时,应该考虑使用\(collections.deque\)。\(collections.deque\)是双端队列,同时具备栈和队列的特性,能够在两端进行 O(1) 复杂度的插入和删除操作。list的查找操作也非常耗时。当需要在list频繁查找某些元素,或频繁有序访问这些元素时,可以使用bisect维护list对象有序并在其中进行二分查找,提升查找的效率。

另外一个常见需求是查找极小值或极大值,此时可以使用heapq模块将list转化为一个堆,使得获取最小值的时间复杂度是 \(O(1)\)。下面的网页给出了常用的 Python 数据结构的各项操作的时间复杂度:https://wiki.python.org/moin/TimeComplexity

1、input (转化为int)

Python3.x 中 input() 函数接受一个标准输入数据,返回为 string 类型。

# 将输入的变量,以空格划分x,y,z = list(map(int, input().split()))

当然除了input()函数还有sys模块带有标准输入,一般情况下比input()函数快4倍,这里注意下区别,input()把读到的行用字符串的形式返回,但不会返回行尾的换行符,而sys.stdin.readline()则会,加上strip()函数效果就一样了

arr=sys.stdin.readline().strip()

2、split

Python split() 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串。返回分割后的字符串列表。

str.split(str="", num=string.count(str)).str -- 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。num -- 分割次数。默认为 -1, 即分隔所有。

3、List空间申请

IndexError:list assignment index out of rangeERROR code

b = []for i in range(10):b[i] = 7

空数组不能直接指定位置,list是一个空的,没有一个元素,进行list[0]就会出现错误!解决方法1

b.append(1)

解决方法2生成一个定长的list:

b=[0]*len(data)b[1]=1list的插入和删除aList = [123, 'xyz', 'zara', 'abc', 'xyz'];aList.remove('xyz')alist.insert(index,obj)obj=alist.pop(index) #defalut index=-1即最后一个元素4、输出格式如1 2 3 4ans=[1,2,3,4]print(' '.join(map(str,ans)))

map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回

参考

https://blog.csdn.net/u013495762/article/details/82870455https://www.cnblogs.com/lincappu/p/8179475.html(map函数用法)https://blog.csdn.net/www_helloworld_com/article/details/82875433

相关推荐: