• 分分钟学会一门语言之Python篇


    转自:http://www.code123.cc/1049.html

    Python 是 90 年代初由 Guido Van Rossum 创立的。它是当前最流行的程序语言之一。它那纯净的语法令我一见倾心,它简直就是可以运行的伪码。

    请注意:本文以 Python 2.7 为基准,但也应该适用于所有 2.X 版本。还要继续学习最新的 Python 3 哦!

      1 # Single line comments start with a hash.
      2 # 单行注释由一个井号开头。
      3 """ Multiline strings can be written
      4     using three "'s, and are often used
      5     as comments
      6     三个双引号(或单引号)之间可以写多行字符串,
      7     通常用来写注释。
      8 """
      9  
     10 ####################################################
     11 ## 1. Primitive Datatypes and Operators
     12 ## 1. 基本数据类型和操作符
     13 ####################################################
     14  
     15 # You have numbers
     16 # 数字就是数字
     17 3 #=> 3
     18  
     19 # Math is what you would expect
     20 # 四则运算也是你所期望的那样
     21 1 + 1 #=> 2
     22 8 - 1 #=> 7
     23 10 * 2 #=> 20
     24 35 / 5 #=> 7
     25  
     26 # Division is a bit tricky. It is integer division and floors the results
     27 # automatically.
     28 # 除法有一点棘手。
     29 # 对于整数除法来说,计算结果会自动取整。
     30 5 / 2 #=> 2
     31  
     32 # To fix division we need to learn about floats.
     33 # 为了修正除法的问题,我们需要先学习浮点数。
     34 2.0     # This is a float
     35 2.0     # 这是一个浮点数
     36 11.0 / 4.0 #=> 2.75 ahhh...much better
     37 11.0 / 4.0 #=> 2.75 啊……这样就好多了
     38  
     39 # Enforce precedence with parentheses
     40 # 使用小括号来强制计算的优先顺序
     41 (1 + 3) * 2 #=> 8
     42  
     43 # Boolean values are primitives
     44 # 布尔值也是基本数据类型
     45 True
     46 False
     47  
     48 # negate with not
     49 # 使用 not 来取反
     50 not True #=> False
     51 not False #=> True
     52  
     53 # Equality is ==
     54 # 等式判断用 ==
     55 1 == 1 #=> True
     56 2 == 1 #=> False
     57  
     58 # Inequality is !=
     59 # 不等式判断是用 !=
     60 1 != 1 #=> False
     61 2 != 1 #=> True
     62  
     63 # More comparisons
     64 # 还有更多的比较运算
     65 1 < 10 #=> True
     66 1 > 10 #=> False
     67 2 <= 2 #=> True
     68 2 >= 2 #=> True
     69  
     70 # Comparisons can be chained!
     71 # 居然可以把比较运算串连起来!
     72 1 < 2 < 3 #=> True
     73 2 < 3 < 2 #=> False
     74  
     75 # Strings are created with " or '
     76 # 使用 " 或 ' 来创建字符串
     77 "This is a string."
     78 'This is also a string.'
     79  
     80 # Strings can be added too!
     81 # 字符串也可以相加!
     82 "Hello " + "world!" #=> "Hello world!"
     83  
     84 # A string can be treated like a list of characters
     85 # 一个字符串可以视为一个字符的列表
     86 # (译注:后面会讲到“列表”。)
     87 "This is a string"[0] #=> 'T'
     88  
     89 # % can be used to format strings, like this:
     90 # % 可以用来格式化字符串,就像这样:
     91 "%s can be %s" % ("strings", "interpolated")
     92  
     93 # A newer way to format strings is the format method.
     94 # This method is the preferred way
     95 # 后来又有一种格式化字符串的新方法:format 方法。
     96 # 我们推荐使用这个方法。
     97 "{0} can be {1}".format("strings", "formatted")
     98  
     99 # You can use keywords if you don't want to count.
    100 # 如果你不喜欢数数的话,可以使用关键字(变量)。
    101 "{name} wants to eat {food}".format(name="Bob", food="lasagna")
    102  
    103 # None is an object
    104 # None 是一个对象
    105 None #=> None
    106  
    107 # Don't use the equality `==` symbol to compare objects to None
    108 # Use `is` instead
    109 # 不要使用相等符号 `==` 来把对象和 None 进行比较,
    110 # 而要用 `is`。
    111 "etc" is None #=> False
    112 None is None  #=> True
    113  
    114 # The 'is' operator tests for object identity. This isn't
    115 # very useful when dealing with primitive values, but is
    116 # very useful when dealing with objects.
    117 # 这个 `is` 操作符用于比较两个对象的标识。
    118 # (译注:对象一旦建立,其标识就不会改变,可以认为它就是对象的内存地址。)
    119 # 在处理基本数据类型时基本用不上,
    120 # 但它在处理对象时很有用。
    121  
    122 # None, 0, and empty strings/lists all evaluate to False.
    123 # All other values are True
    124 # None、0 以及空字符串和空列表都等于 False,
    125 # 除此以外的所有值都等于 True。
    126 0 == False  #=> True
    127 "" == False #=> True
    128  
    129  
    130 ####################################################
    131 ## 2. Variables and Collections
    132 ## 2. 变量和集合
    133 ####################################################
    134  
    135 # Printing is pretty easy
    136 # 打印输出很简单
    137 print "I'm Python. Nice to meet you!"
    138  
    139  
    140 # No need to declare variables before assigning to them.
    141 # 在赋值给变量之前不需要声明
    142 some_var = 5    # Convention is to use lower_case_with_underscores
    143                 # 变量名的约定是使用下划线分隔的小写单词
    144 some_var #=> 5
    145  
    146 # Accessing a previously unassigned variable is an exception.
    147 # See Control Flow to learn more about exception handling.
    148 # 访问一个未赋值的变量会产生一个异常。
    149 # 进一步了解异常处理,可参见下一节《控制流》。
    150 some_other_var  # Raises a name error
    151                 # 会抛出一个名称错误
    152  
    153 # if can be used as an expression
    154 # if 可以作为表达式来使用
    155 "yahoo!" if 3 > 2 else 2 #=> "yahoo!"
    156  
    157 # Lists store sequences
    158 # 列表用于存储序列
    159 li = []
    160 # You can start with a prefilled list
    161 # 我们先尝试一个预先填充好的列表
    162 other_li = [4, 5, 6]
    163  
    164 # Add stuff to the end of a list with append
    165 # 使用 append 方法把元素添加到列表的尾部
    166 li.append(1)    #li is now [1]
    167                 #li 现在是 [1]
    168 li.append(2)    #li is now [1, 2]
    169                 #li 现在是 [1, 2]
    170 li.append(4)    #li is now [1, 2, 4]
    171                 #li 现在是 [1, 2, 4]
    172 li.append(3)    #li is now [1, 2, 4, 3]
    173                 #li 现在是 [1, 2, 4, 3]
    174 # Remove from the end with pop
    175 # 使用 pop 来移除最后一个元素
    176 li.pop()        #=> 3 and li is now [1, 2, 4]
    177                 #=> 3,然后 li 现在是 [1, 2, 4]
    178 # Let's put it back
    179 # 我们再把它放回去
    180 li.append(3)    # li is now [1, 2, 4, 3] again.
    181                 # li 现在又是 [1, 2, 4, 3] 了
    182  
    183 # Access a list like you would any array
    184 # 像访问其它语言的数组那样访问列表
    185 li[0] #=> 1
    186 # Look at the last element
    187 # 查询最后一个元素
    188 li[-1] #=> 3
    189  
    190 # Looking out of bounds is an IndexError
    191 # 越界查询会产生一个索引错误
    192 li[4] # Raises an IndexError
    193       # 抛出一个索引错误
    194  
    195 # You can look at ranges with slice syntax.
    196 # (It's a closed/open range for you mathy types.)
    197 # 你可以使用切片语法来查询列表的一个范围。
    198 # (这个范围相当于数学中的左闭右开区间。)
    199 li[1:3] #=> [2, 4]
    200 # Omit the beginning
    201 # 省略开头
    202 li[2:] #=> [4, 3]
    203 # Omit the end
    204 # 省略结尾
    205 li[:3] #=> [1, 2, 4]
    206  
    207 # Remove arbitrary elements from a list with del
    208 # 使用 del 来删除列表中的任意元素
    209 del li[2] # li is now [1, 2, 3]
    210           # li 现在是 [1, 2, 3]
    211  
    212 # You can add lists
    213 # 可以把列表相加
    214 li + other_li #=> [1, 2, 3, 4, 5, 6] - Note: li and other_li is left alone
    215               #=> [1, 2, 3, 4, 5, 6] - 请留意 li 和 other_li 并不会被修改
    216  
    217 # Concatenate lists with extend
    218 # 使用 extend 来合并列表
    219 li.extend(other_li) # Now li is [1, 2, 3, 4, 5, 6]
    220                     # 现在 li 是 [1, 2, 3, 4, 5, 6]
    221  
    222 # Check for existence in a list with in
    223 # 用 in 来检查是否存在于某个列表中
    224 1 in li #=> True
    225  
    226 # Examine the length with len
    227 # 用 len 来检测列表的长度
    228 len(li) #=> 6
    229  
    230  
    231 # Tuples are like lists but are immutable.
    232 # 元组很像列表,但它是“不可变”的。
    233 tup = (1, 2, 3)
    234 tup[0] #=> 1
    235 tup[0] = 3  # Raises a TypeError
    236             # 抛出一个类型错误
    237  
    238 # You can do all those list thingies on tuples too
    239 # 操作列表的方式通常也能用在元组身上
    240 len(tup) #=> 3
    241 tup + (4, 5, 6) #=> (1, 2, 3, 4, 5, 6)
    242 tup[:2] #=> (1, 2)
    243 2 in tup #=> True
    244  
    245 # You can unpack tuples (or lists) into variables
    246 # 你可以把元组(或列表)中的元素解包赋值给多个变量
    247 a, b, c = (1, 2, 3)     # a is now 1, b is now 2 and c is now 3
    248                         # 现在 a 是 1,b 是 2,c 是 3
    249 # Tuples are created by default if you leave out the parentheses
    250 # 如果你省去了小括号,那么元组会被自动创建
    251 d, e, f = 4, 5, 6
    252 # Now look how easy it is to swap two values
    253 # 再来看看交换两个值是多么简单。
    254 e, d = d, e     # d is now 5 and e is now 4
    255                 # 现在 d 是 5 而 e 是 4
    256  
    257  
    258 # Dictionaries store mappings
    259 # 字典用于存储映射关系
    260 empty_dict = {}
    261 # Here is a prefilled dictionary
    262 # 这是一个预先填充的字典
    263 filled_dict = {"one": 1, "two": 2, "three": 3}
    264  
    265 # Look up values with []
    266 # 使用 [] 来查询键值
    267 filled_dict["one"] #=> 1
    268  
    269 # Get all keys as a list
    270 # 将字典的所有键名获取为一个列表
    271 filled_dict.keys() #=> ["three", "two", "one"]
    272 # Note - Dictionary key ordering is not guaranteed.
    273 # Your results might not match this exactly.
    274 # 请注意:无法保证字典键名的顺序如何排列。
    275 # 你得到的结果可能跟上面的示例不一致。
    276  
    277 # Get all values as a list
    278 # 将字典的所有键值获取为一个列表
    279 filled_dict.values() #=> [3, 2, 1]
    280 # Note - Same as above regarding key ordering.
    281 # 请注意:顺序的问题和上面一样。
    282  
    283 # Check for existence of keys in a dictionary with in
    284 # 使用 in 来检查一个字典是否包含某个键名
    285 "one" in filled_dict #=> True
    286 1 in filled_dict #=> False
    287  
    288 # Looking up a non-existing key is a KeyError
    289 # 查询一个不存在的键名会产生一个键名错误
    290 filled_dict["four"] # KeyError
    291                     # 键名错误
    292  
    293 # Use get method to avoid the KeyError
    294 # 所以要使用 get 方法来避免键名错误
    295 filled_dict.get("one") #=> 1
    296 filled_dict.get("four") #=> None
    297 # The get method supports a default argument when the value is missing
    298 # get 方法支持传入一个默认值参数,将在取不到值时返回。
    299 filled_dict.get("one", 4) #=> 1
    300 filled_dict.get("four", 4) #=> 4
    301  
    302 # Setdefault method is a safe way to add new key-value pair into dictionary
    303 # Setdefault 方法可以安全地把新的名值对添加到字典里
    304 filled_dict.setdefault("five", 5) #filled_dict["five"] is set to 5
    305                                   #filled_dict["five"] 被设置为 5
    306 filled_dict.setdefault("five", 6) #filled_dict["five"] is still 5
    307                                   #filled_dict["five"] 仍然为 5
    308  
    309  
    310 # Sets store ... well sets
    311 # set 用于保存集合
    312 empty_set = set()
    313 # Initialize a set with a bunch of values
    314 # 使用一堆值来初始化一个集合
    315 some_set = set([1,2,2,3,4]) # some_set is now set([1, 2, 3, 4])
    316                             # some_set 现在是 set([1, 2, 3, 4])
    317  
    318 # Since Python 2.7, {} can be used to declare a set
    319 # 从 Python 2.7 开始,{} 可以用来声明一个集合
    320 filled_set = {1, 2, 2, 3, 4} # => {1, 2, 3, 4}
    321                              # (译注:集合是种无序不重复的元素集,因此重复的 2 被滤除了。)
    322                              # (译注:{} 不会创建一个空集合,只会创建一个空字典。)
    323  
    324 # Add more items to a set
    325 # 把更多的元素添加进一个集合
    326 filled_set.add(5) # filled_set is now {1, 2, 3, 4, 5}
    327                   # filled_set 现在是 {1, 2, 3, 4, 5}
    328  
    329 # Do set intersection with &
    330 # 使用 & 来获取交集
    331 other_set = {3, 4, 5, 6}
    332 filled_set & other_set #=> {3, 4, 5}
    333  
    334 # Do set union with |
    335 # 使用 | 来获取并集
    336 filled_set | other_set #=> {1, 2, 3, 4, 5, 6}
    337  
    338 # Do set difference with -
    339 # 使用 - 来获取补集
    340 {1,2,3,4} - {2,3,5} #=> {1, 4}
    341  
    342 # Check for existence in a set with in
    343 # 使用 in 来检查是否存在于某个集合中
    344 2 in filled_set #=> True
    345 10 in filled_set #=> False
    346  
    347  
    348 ####################################################
    349 ## 3. Control Flow
    350 ## 3. 控制流
    351 ####################################################
    352  
    353 # Let's just make a variable
    354 # 我们先创建一个变量
    355 some_var = 5
    356  
    357 # Here is an if statement. Indentation is significant in python!
    358 # prints "some_var is smaller than 10"
    359 # 这里有一个条件语句。缩进在 Python 中可是很重要的哦!
    360 # 程序会打印出 "some_var is smaller than 10"
    361 # (译注:意为“some_var 比 10 小”。)
    362 if some_var > 10:
    363     print "some_var is totally bigger than 10."
    364     # (译注:意为“some_var 完全比 10 大”。)
    365 elif some_var < 10:    # This elif clause is optional.
    366                        # 这里的 elif 子句是可选的
    367     print "some_var is smaller than 10."
    368     # (译注:意为“some_var 比 10 小”。)
    369 else:           # This is optional too.
    370                 # 这一句也是可选的
    371     print "some_var is indeed 10."
    372     # (译注:意为“some_var 就是 10”。)
    373  
    374  
    375 """
    376 For loops iterate over lists
    377 for 循环可以遍历列表
    378 prints:
    379 如果要打印出:
    380     dog is a mammal
    381     cat is a mammal
    382     mouse is a mammal
    383 """
    384 for animal in ["dog", "cat", "mouse"]:
    385     # You can use % to interpolate formatted strings
    386     # 别忘了你可以使用 % 来格式化字符串
    387     print "%s is a mammal" % animal
    388     # (译注:意为“%s 是哺乳动物”。)
    389  
    390 """
    391 `range(number)` returns a list of numbers 
    392 from zero to the given number
    393 `range(数字)` 会返回一个数字列表,
    394 这个列表将包含从零到给定的数字。
    395 prints:
    396 如果要打印出:
    397     0
    398     1
    399     2
    400     3
    401 """
    402 for i in range(4):
    403     print i
    404  
    405 """
    406 While loops go until a condition is no longer met.
    407 while 循环会一直继续,直到条件不再满足。
    408 prints:
    409 如果要打印出:
    410     0
    411     1
    412     2
    413     3
    414 """
    415 x = 0
    416 while x < 4:
    417     print x
    418     x += 1  # Shorthand for x = x + 1
    419             # 这是 x = x + 1 的简写方式
    420  
    421 # Handle exceptions with a try/except block
    422 # 使用 try/except 代码块来处理异常
    423  
    424 # Works on Python 2.6 and up:
    425 # 适用于 Python 2.6 及以上版本:
    426 try:
    427     # Use raise to raise an error
    428     # 使用 raise 来抛出一个错误
    429     raise IndexError("This is an index error")
    430     # 抛出一个索引错误:“这是一个索引错误”。
    431 except IndexError as e:
    432     pass    # Pass is just a no-op. Usually you would do recovery here.
    433             # pass 只是一个空操作。通常你应该在这里做一些恢复工作。
    434  
    435  
    436 ####################################################
    437 ## 4. Functions
    438 ## 4. 函数
    439 ####################################################
    440  
    441 # Use def to create new functions
    442 # 使用 def 来创建新函数
    443 def add(x, y):
    444     print "x is %s and y is %s" % (x, y)
    445     # (译注:意为“x 是 %s 而且 y 是 %s”。)
    446     return x + y    # Return values with a return statement
    447                     # 使用 return 语句来返回值
    448  
    449 # Calling functions with parameters
    450 # 调用函数并传入参数
    451 add(5, 6) #=> prints out "x is 5 and y is 6" and returns 11
    452           # (译注:意为“x 是 5 而且 y 是 6”,并返回 11)
    453  
    454 # Another way to call functions is with keyword arguments
    455 # 调用函数的另一种方式是传入关键字参数
    456 add(y=6, x=5)   # Keyword arguments can arrive in any order.
    457                 # 关键字参数可以以任意顺序传入
    458  
    459 # You can define functions that take a variable number of
    460 # positional arguments
    461 # 你可以定义一个函数,并让它接受可变数量的定位参数。
    462 def varargs(*args):
    463     return args
    464  
    465 varargs(1, 2, 3) #=> (1,2,3)
    466  
    467  
    468 # You can define functions that take a variable number of
    469 # keyword arguments, as well
    470 # 你也可以定义一个函数,并让它接受可变数量的关键字参数。
    471 def keyword_args(**kwargs):
    472     return kwargs
    473  
    474 # Let's call it to see what happens
    475 # 我们试着调用它,看看会发生什么:
    476 keyword_args(big="foot", loch="ness") #=> {"big": "foot", "loch": "ness"}
    477  
    478 # You can do both at once, if you like
    479 # 你还可以同时使用这两类参数,只要你愿意:
    480 def all_the_args(*args, **kwargs):
    481     print args
    482     print kwargs
    483 """
    484 all_the_args(1, 2, a=3, b=4) prints:
    485     (1, 2)
    486     {"a": 3, "b": 4}
    487 """
    488  
    489 # When calling functions, you can do the opposite of varargs/kwargs!
    490 # Use * to expand tuples and use ** to expand kwargs.
    491 # 在调用函数时,定位参数和关键字参数还可以反过来用。
    492 # 使用 * 来展开元组,使用 ** 来展开关键字参数。
    493 args = (1, 2, 3, 4)
    494 kwargs = {"a": 3, "b": 4}
    495 all_the_args(*args) # equivalent to foo(1, 2, 3, 4)
    496                     # 相当于 all_the_args(1, 2, 3, 4)
    497 all_the_args(**kwargs) # equivalent to foo(a=3, b=4)
    498                        # 相当于 all_the_args(a=3, b=4)
    499 all_the_args(*args, **kwargs) # equivalent to foo(1, 2, 3, 4, a=3, b=4)
    500                               # 相当于 all_the_args(1, 2, 3, 4, a=3, b=4)
    501  
    502 # Python has first class functions
    503 # 函数在 Python 中是一等公民
    504 def create_adder(x):
    505     def adder(y):
    506         return x + y
    507     return adder
    508  
    509 add_10 = create_adder(10)
    510 add_10(3) #=> 13
    511  
    512 # There are also anonymous functions
    513 # 还有匿名函数
    514 (lambda x: x > 2)(3) #=> True
    515  
    516 # There are built-in higher order functions
    517 # 还有一些内建的高阶函数
    518 map(add_10, [1,2,3]) #=> [11, 12, 13]
    519 filter(lambda x: x > 5, [3, 4, 5, 6, 7]) #=> [6, 7]
    520  
    521 # We can use list comprehensions for nice maps and filters
    522 # 我们可以使用列表推导式来模拟 map 和 filter
    523 [add_10(i) for i in [1, 2, 3]]  #=> [11, 12, 13]
    524 [x for x in [3, 4, 5, 6, 7] if x > 5] #=> [6, 7]
    525  
    526 ####################################################
    527 ## 5. Classes
    528 ## 5. 类
    529 ####################################################
    530  
    531 # We subclass from object to get a class.
    532 # 我们可以从对象中继承,来得到一个类。
    533 class Human(object):
    534  
    535     # A class attribute. It is shared by all instances of this class
    536     # 下面是一个类属性。它将被这个类的所有实例共享。
    537     species = "H. sapiens"
    538  
    539     # Basic initializer
    540     # 基本的初始化函数(构造函数)
    541     def __init__(self, name):
    542         # Assign the argument to the instance's name attribute
    543         # 把参数赋值为实例的 name 属性
    544         self.name = name
    545  
    546     # An instance method. All methods take self as the first argument
    547     # 下面是一个实例方法。所有方法都以 self 作为第一个参数。
    548     def say(self, msg):
    549        return "%s: %s" % (self.name, msg)
    550  
    551     # A class method is shared among all instances
    552     # They are called with the calling class as the first argument
    553     # 类方法会被所有实例共享。
    554     # 类方法在调用时,会将类本身作为第一个函数传入。
    555     @classmethod
    556     def get_species(cls):
    557         return cls.species
    558  
    559     # A static method is called without a class or instance reference
    560     # 静态方法在调用时,不会传入类或实例的引用。
    561     @staticmethod
    562     def grunt():
    563         return "*grunt*"
    564  
    565  
    566 # Instantiate a class
    567 # 实例化一个类
    568 i = Human(name="Ian")
    569 print i.say("hi")     # prints out "Ian: hi"
    570                       # 打印出 "Ian: hi"
    571  
    572 j = Human("Joel")
    573 print j.say("hello")  # prints out "Joel: hello"
    574                       # 打印出 "Joel: hello"
    575  
    576 # Call our class method
    577 # 调用我们的类方法
    578 i.get_species() #=> "H. sapiens"
    579  
    580 # Change the shared attribute
    581 # 修改共享属性
    582 Human.species = "H. neanderthalensis"
    583 i.get_species() #=> "H. neanderthalensis"
    584 j.get_species() #=> "H. neanderthalensis"
    585  
    586 # Call the static method
    587 # 调用静态方法
    588 Human.grunt() #=> "*grunt*"
    589  
    590  
    591 ####################################################
    592 ## 6. Modules
    593 ## 6. 模块
    594 ####################################################
    595  
    596 # You can import modules
    597 # 你可以导入模块
    598 import math
    599 print math.sqrt(16) #=> 4
    600  
    601 # You can get specific functions from a module
    602 # 也可以从一个模块中获取指定的函数
    603 from math import ceil, floor
    604 print ceil(3.7)  #=> 4.0
    605 print floor(3.7) #=> 3.0
    606  
    607 # You can import all functions from a module.
    608 # Warning: this is not recommended
    609 # 你可以从一个模块中导入所有函数
    610 # 警告:不建议使用这种方式
    611 from math import *
    612  
    613 # You can shorten module names
    614 # 你可以缩短模块的名称
    615 import math as m
    616 math.sqrt(16) == m.sqrt(16) #=> True
    617  
    618 # Python modules are just ordinary python files. You
    619 # can write your own, and import them. The name of the 
    620 # module is the same as the name of the file.
    621 # Python 模块就是普通的 Python 文件。
    622 # 你可以编写你自己的模块,然后导入它们。
    623 # 模块的名称与文件名相同。
    624  
    625 # You can find out which functions and attributes
    626 # defines a module.
    627 # 你可以查出一个模块里有哪些函数和属性
    628 import math
    629 dir(math)
  • 相关阅读:
    codechef Graph on a Table
    CF1063F. String Journey
    BZOJ1547: 周末晚会
    maxsigma
    LOJ#2351. 「JOI 2018 Final」毒蛇越狱
    BZOJ3632: 外太空旅行
    图论:tarjan相关算法复习
    Codeforces 321E. Ciel and Gondolas(凸优化+决策单调性)
    5031. 【NOI2017模拟3.27】B (k次狄利克雷卷积)
    CSAcademy Round 10 Yury's Tree(有根树点分树或kruskal重构树)
  • 原文地址:https://www.cnblogs.com/daxiong2014/p/6598976.html
Copyright © 2020-2023  润新知