3-апта.
5-сабақ. (15.06.2021)
1. Алдыңғы 2-тапсырманы талқылау
2. Олимпиада 2-апта талқылау
3. Биттік операциялар (&,|,^,~)
4. import operators (add, sub, mul, pow, xor, ...)
5. import itertools (
chain
accumulate
compress
starmap
product
permutations
combinations
6. Practices
1) Алдыңғы 2-тапсырманы талқылау
A. Подсчёт функции https://codeforces.com/problemset/problem/486/A
(https://codeforces.com/problemset/problem/486/A)
A. Трамвай https://codeforces.com/problemset/problem/116/A (https://codeforces.com/problemset/problem/116/A)
In [1]: # Подсчёт функции
n=int(input())
if n%2==0:
print(n//2)
else:
print(n//2-n)
5
-3
In [2]: # Трамвай
n=int(input())
s=0
c=[]
for i in range(n):
a,b=map(int,input().split())
s-=a
s+=b
c.append(s)
print(max(c))
3
0 4
3 10
11 0
11
2) Олимпиада (1-апта) 5 есепті талқылау
A. Антон и Даник
https://codeforces.com/gym/332098/problem/A (https://codeforces.com/gym/332098/problem/A)
In [3]: # A. Антон и Даник
input()
s = input()
a = s.count('A')
d = s.count('D')
if a>d:
print('Anton')
elif a==d:
print('Friendship')
else:
print('Danik')
6
AAADDA
Anton
B. Театральная площадь
https://codeforces.com/gym/332098/problem/B (https://codeforces.com/gym/332098/problem/B)
In [4]: # B. Театральная площадь
n,m,a=map(int,input().split())
if m%a==0:
s=m//a
else:
s=m//a+1
if n%a==0:
d=n//a
else:
d=n//a+1
print(s*d)
6 6 4
4
In [5]: # B. Театральная площадь
from math import ceil
n,m,a=map(int,input().split())
print(ceil(n/a)*ceil(m/a))
6 6 4
4
In [6]: # B. Театральная площадь
n,m,a=map(int,input().split())
print(-n//a*(-m//a))
6 6 4
4
In [7]: n = 11
a=4
print(n//a,n%a,n/a)
print(-n//a,-n%a,-n/a)
2 3 2.75
-3 1 -2.75
C. Напитки
https://codeforces.com/gym/332098/problem/C (https://codeforces.com/gym/332098/problem/C)
In [8]: # C. Напитки
n = int(input())
a=list(map(int,input().split()))
print(sum(a)/n)
4
0 25 50 75
37.5
D. Капитализация слова
https://codeforces.com/gym/332098/problem/D (https://codeforces.com/gym/332098/problem/D)
In [9]: # D. Капитализация слова
s = input()
print(s[0].upper()+s[1:])
apPle
ApPle
E. Следующий раунд
https://codeforces.com/gym/332098/problem/E (https://codeforces.com/gym/332098/problem/E)
In [10]: # E. Следующий раунд
n,k=map(int,input().split())
l=list(map(int,input().split()))
c=0
for i in range(len(l)):
#if l[i]>=l[k-1] and l[i]>0:
if 0<l[i]>=l[k-1]:
c+=1
print(c)
5 5
1 1 1 0 0
3
3) Биттік операциялар
& - and
In [11]: a = 15
b=8
print(bin(a))
print(bin(b))
print('------')
print(bin(a&b))
print(a&b)
0b1111
0b1000
------
0b1000
8
In [12]: a = 10
b=1
print(bin(a))
print(bin(b))
print('------')
print(bin(a&b))
print(a&b)
0b1010
0b1
------
0b0
0
| - or
In [13]: a = 15
b=8
print(bin(a))
print(bin(b))
print('------')
print(bin(a|b))
print(a|b)
0b1111
0b1000
------
0b1111
15
In [14]: a = 10
b=1
print(bin(a))
print(bin(b))
print('------')
print(bin(a|b))
print(a|b)
0b1010
0b1
------
0b1011
11
^ - xor
In [15]: a = 15
b=8
print(bin(a))
print(bin(b))
print('------')
print(bin(a^b))
print(a^b)
0b1111
0b1000
------
0b111
7
In [16]: a = 10
b=1
print(bin(a))
print(bin(b))
print('------')
print(bin(a^b))
print(a^b)
0b1010
0b1
------
0b1011
11
>> - Битті оң жаққа жылжыту
In [17]: a = 10
b = 1 # 1-orynga jyljytu
print(bin(a))
print(bin(a>>b))
print(a>>b)
0b1010
0b101
5
In [18]: a = 10
b = 3 # 3-orynga jyljytu
print(bin(a))
print(bin(a>>b))
print(a>>b)
0b1010
0b1
1
In [19]: a = 10
b = 10 # 10-orynga jyljytu
print(bin(a))
print(bin(a>>b))
print(a>>b)
0b1010
0b0
0
>> - Битті солға жаққа жылжыту
In [20]: a = 10
b = 1 # 1-orynga jyljytu
print(bin(a))
print(bin(a<<b))
print(a<<b)
0b1010
0b10100
20
In [21]: a = 10
b = 4 # 4-orynga jyljytu
print(bin(a))
print(bin(a<<b))
print(a<<b)
0b1010
0b10100000
160
In [22]: a = 10
b = 10 # 10-orynga jyljytu
print(bin(a))
print(bin(a<<b))
print(a<<b)
0b1010
0b10100000000000
10240
~ - NOT
In [23]: a = 7
print(bin(a))
print(bin(~a))
print(~a)
0b111
-0b1000
-8
In [24]: a = 1
print(bin(a))
print(bin(~a))
print(~a)
0b1
-0b10
-2
In [25]: a = -1
print(bin(a))
print(bin(~a))
print(~a)
-0b1
0b0
0
4) import operators (add, sub, mul, pow, xor, ...)
In [26]: import operator
a,b = 23,9
print(operator.add(a,b)) # a+b
print(operator.sub(a,b)) # a-b
print(operator.mul(a,b)) # a*b
print(operator.pow(a,b)) # a**b
print(operator.truediv(a,b)) # a/b
print(operator.floordiv(a,b)) # a//b
print(operator.mod(a,b)) # a%b
32
14
207
1801152661463
2.5555555555555554
2
5
In [27]: from operator import *
a,b = 23,9
print(add(a,b)) # a+b
print(sub(a,b)) # a-b
print(mul(a,b)) # a*b
print(pow(a,b)) # a**b
print(truediv(a,b)) # a/b
print(floordiv(a,b)) # a//b
print(mod(a,b)) # a%b
32
14
207
1801152661463
2.5555555555555554
2
5
In [28]: import operator # a<b
a,b = 23,9 # a<=b
print(operator.lt(a,b)) # a==b
print(operator.le(a,b)) # a!=b
print(operator.eq(a,b)) # a>=b
print(operator.ne(a,b)) # a>b
print(operator.ge(a,b))
print(operator.gt(a,b))
False
False
False
True
True
True
In [29]: import operator # a^b
a,b = 23,9 # a&b
print(operator.xor(a,b)) # a&b
print(operator.and_(a, b)) # ~a
print(operator.or_(a, b)) # a>>b
print(operator.invert(a)) # a<<b
print(operator.lshift(a, b))
print(operator.rshift(a, b))
30
1
31
-24
11776
0
4) import itertools
chain()
In [30]: # iteration tools -> itertools
import itertools
a = ['ABCDEF','123456','!@#$%^','abcdef']
b = itertools.chain(*a)
print(*b)
A B C D E F 1 2 3 4 5 6 ! @ # $ % ^ a b c d e f
In [31]: from itertools import chain
a = ['aabcde','abacde','aaade','daf']
b = chain(*a)
print(*b)
c = set(chain(*a))
print(*sorted(c))
a a b c d e a b a c d e a a a d e d a f
a b c d e f
accumulate()
In [32]: from itertools import accumulate
a = ['aabcde','abacde','aaade','daf']
b = accumulate(a)
print(*b)
aabcde aabcdeabacde aabcdeabacdeaaade aabcdeabacdeaaadedaf
In [33]: from itertools import accumulate
a = [1,2,3,4,5,6,7]
b = accumulate(a)
print(*b)
1 3 6 10 15 21 28
In [34]: from itertools import accumulate
import operator
a = [1,2,3,4,5,6,7]
b = accumulate(a,operator.mul)
print(*b)
1 2 6 24 120 720 5040
In [35]: from itertools import accumulate
import operator
a = [1,2,3,4,5,6,7]
b = accumulate(a,operator.mul)
print(*b)
1 2 6 24 120 720 5040
In [36]: from itertools import accumulate
import operator
a = [1,2,3,4,5,6,7]
b = accumulate(a,operator.xor)
print(*b)
1 3 0 4 1 7 0
In [37]: from itertools import accumulate
import operator
a = [10,1,2,3,4,5,6,7]
b = accumulate(a,operator.le) # a>=b
print(*b)
10 False True True True True True True
compress()
In [38]: from itertools import compress
a = [1,2,3,4,5,6,7]
c = [1,0,0,1,1,1,0]
b = compress(a,c)
print(*b)
1 4 5 6
In [39]: from itertools import compress
s = 'Kazakhstan'
a = [1,0]*6
print(a)
b = compress(s,a)
print(s)
print(*b)
[1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0]
Kazakhstan
K z k s a
starmap() - map() by functions
In [40]: s = "Alga Kazakhstan! Alga!"
a = list(map(str,s.split()))
print(a)
['Alga', 'Kazakhstan!', 'Alga!']
In [41]: s = "123 23 5 543 34 435"
a = list(map(int,s.split()))
print(a)
[123, 23, 5, 543, 34, 435]
In [42]: from itertools import starmap
a = [[1,234,123],[324,23,-11],[3453,23,45]]
b = starmap(max,a)
print(*b)
234 324 3453
In [43]: from itertools import starmap
a = [[5,2],[2,5],[10,9]]
b = starmap(pow,a)
print(*b)
25 32 1000000000
In [44]: from itertools import starmap
import operator
a = [[5,2],[2,5],[10,9]]
b = starmap(operator.xor,a)
print(*b)
7 7 3
In [45]: from itertools import starmap
def myFunc(a,b):
return (a*a+b*b)**0.5
a = [[5,2],[2,5],[10,9]]
b = starmap(myFunc,a)
print(*b)
5.385164807134504 5.385164807134504 13.45362404707371
product()
In [46]: a = 'abc' # ['a','b','c']
b = '1234' # ['1','2','3','4']
c = []
for i in a:
for j in b:
c.append([i,j])
print(c)
print(len(c))
[['a', '1'], ['a', '2'], ['a', '3'], ['a', '4'], ['b', '1'], ['b', '2'], ['b', '3'], ['b',
'4'], ['c', '1'], ['c', '2'], ['c', '3'], ['c', '4']]
12
In [47]: from itertools import product
a = 'abc' # ['a','b','c']
b = '1234' # ['1','2','3','4']
c = list(product(a,b))
print(*c)
print(len(c))
('a', '1') ('a', '2') ('a', '3') ('a', '4') ('b', '1') ('b', '2') ('b', '3') ('b', '4') ('c',
'1') ('c', '2') ('c', '3') ('c', '4')
12
In [48]: a = ['abc','123','XYZ','-+']
b = []
for i in a[0]:
for j in a[1]:
for k in a[2]:
for l in a[3]:
b.append([i,j,k,l])
print(*b)
print(len(b))
['a', '1', 'X', '-'] ['a', '1', 'X', '+'] ['a', '1', 'Y', '-'] ['a', '1', 'Y', '+'] ['a', '1',
'Z', '-'] ['a', '1', 'Z', '+'] ['a', '2', 'X', '-'] ['a', '2', 'X', '+'] ['a', '2', 'Y', '-']
['a', '2', 'Y', '+'] ['a', '2', 'Z', '-'] ['a', '2', 'Z', '+'] ['a', '3', 'X', '-'] ['a', '3',
'X', '+'] ['a', '3', 'Y', '-'] ['a', '3', 'Y', '+'] ['a', '3', 'Z', '-'] ['a', '3', 'Z', '+']
['b', '1', 'X', '-'] ['b', '1', 'X', '+'] ['b', '1', 'Y', '-'] ['b', '1', 'Y', '+'] ['b', '1',
'Z', '-'] ['b', '1', 'Z', '+'] ['b', '2', 'X', '-'] ['b', '2', 'X', '+'] ['b', '2', 'Y', '-']
['b', '2', 'Y', '+'] ['b', '2', 'Z', '-'] ['b', '2', 'Z', '+'] ['b', '3', 'X', '-'] ['b', '3',
'X', '+'] ['b', '3', 'Y', '-'] ['b', '3', 'Y', '+'] ['b', '3', 'Z', '-'] ['b', '3', 'Z', '+']
['c', '1', 'X', '-'] ['c', '1', 'X', '+'] ['c', '1', 'Y', '-'] ['c', '1', 'Y', '+'] ['c', '1',
'Z', '-'] ['c', '1', 'Z', '+'] ['c', '2', 'X', '-'] ['c', '2', 'X', '+'] ['c', '2', 'Y', '-']
['c', '2', 'Y', '+'] ['c', '2', 'Z', '-'] ['c', '2', 'Z', '+'] ['c', '3', 'X', '-'] ['c', '3',
'X', '+'] ['c', '3', 'Y', '-'] ['c', '3', 'Y', '+'] ['c', '3', 'Z', '-'] ['c', '3', 'Z', '+']
54
In [49]: a = ['abc','123','XYZ','-+']
b = []
for i in a[0]:
for j in a[1]:
for k in a[2]:
for l in a[3]:
b.append(i+j+k+l) # b.append(''.join([i,j,k,l]))
print(*b)
print(len(b))
a1X- a1X+ a1Y- a1Y+ a1Z- a1Z+ a2X- a2X+ a2Y- a2Y+ a2Z- a2Z+ a3X- a3X+ a3Y- a3Y+ a3Z- a3Z+ b1X-
b1X+ b1Y- b1Y+ b1Z- b1Z+ b2X- b2X+ b2Y- b2Y+ b2Z- b2Z+ b3X- b3X+ b3Y- b3Y+ b3Z- b3Z+ c1X- c1X+
c1Y- c1Y+ c1Z- c1Z+ c2X- c2X+ c2Y- c2Y+ c2Z- c2Z+ c3X- c3X+ c3Y- c3Y+ c3Z- c3Z+
54
In [50]: from itertools import product
a = ['abc','123','XYZ','-+']
b = list(product(*a))
print(*b)
print(len(b))
('a', '1', 'X', '-') ('a', '1', 'X', '+') ('a', '1', 'Y', '-') ('a', '1', 'Y', '+') ('a', '1',
'Z', '-') ('a', '1', 'Z', '+') ('a', '2', 'X', '-') ('a', '2', 'X', '+') ('a', '2', 'Y', '-')
('a', '2', 'Y', '+') ('a', '2', 'Z', '-') ('a', '2', 'Z', '+') ('a', '3', 'X', '-') ('a', '3',
'X', '+') ('a', '3', 'Y', '-') ('a', '3', 'Y', '+') ('a', '3', 'Z', '-') ('a', '3', 'Z', '+')
('b', '1', 'X', '-') ('b', '1', 'X', '+') ('b', '1', 'Y', '-') ('b', '1', 'Y', '+') ('b', '1',
'Z', '-') ('b', '1', 'Z', '+') ('b', '2', 'X', '-') ('b', '2', 'X', '+') ('b', '2', 'Y', '-')
('b', '2', 'Y', '+') ('b', '2', 'Z', '-') ('b', '2', 'Z', '+') ('b', '3', 'X', '-') ('b', '3',
'X', '+') ('b', '3', 'Y', '-') ('b', '3', 'Y', '+') ('b', '3', 'Z', '-') ('b', '3', 'Z', '+')
('c', '1', 'X', '-') ('c', '1', 'X', '+') ('c', '1', 'Y', '-') ('c', '1', 'Y', '+') ('c', '1',
'Z', '-') ('c', '1', 'Z', '+') ('c', '2', 'X', '-') ('c', '2', 'X', '+') ('c', '2', 'Y', '-')
('c', '2', 'Y', '+') ('c', '2', 'Z', '-') ('c', '2', 'Z', '+') ('c', '3', 'X', '-') ('c', '3',
'X', '+') ('c', '3', 'Y', '-') ('c', '3', 'Y', '+') ('c', '3', 'Z', '-') ('c', '3', 'Z', '+')
54
In [51]: from itertools import product,starmap
def myJoin(*a):
return ''.join(a)
a = ['abc','123','XYZ','-+']
b = list(product(*a))
print(*starmap(myJoin,b))
print(len(b))
a1X- a1X+ a1Y- a1Y+ a1Z- a1Z+ a2X- a2X+ a2Y- a2Y+ a2Z- a2Z+ a3X- a3X+ a3Y- a3Y+ a3Z- a3Z+ b1X-
b1X+ b1Y- b1Y+ b1Z- b1Z+ b2X- b2X+ b2Y- b2Y+ b2Z- b2Z+ b3X- b3X+ b3Y- b3Y+ b3Z- b3Z+ c1X- c1X+
c1Y- c1Y+ c1Z- c1Z+ c2X- c2X+ c2Y- c2Y+ c2Z- c2Z+ c3X- c3X+ c3Y- c3Y+ c3Z- c3Z+
54
In [52]: from itertools import product
a = list(product('ABCD',repeat = 2))
print(*a)
print(len(a))
('A', 'A') ('A', 'B') ('A', 'C') ('A', 'D') ('B', 'A') ('B', 'B') ('B', 'C') ('B', 'D') ('C',
'A') ('C', 'B') ('C', 'C') ('C', 'D') ('D', 'A') ('D', 'B') ('D', 'C') ('D', 'D')
16
In [53]: from itertools import product
a = list(product('ABCD','ABCD'))
print(*a)
print(len(a))
('A', 'A') ('A', 'B') ('A', 'C') ('A', 'D') ('B', 'A') ('B', 'B') ('B', 'C') ('B', 'D') ('C',
'A') ('C', 'B') ('C', 'C') ('C', 'D') ('D', 'A') ('D', 'B') ('D', 'C') ('D', 'D')
16
permutations
permutations
In [54]: from math import factorial as f
s = 'abcde'
n = len(s)
r = 2 # ab ac ad ae ...
P = f(n)//f(n-r)
print(P)
20
In [55]: s = 'abcde'
c=0
for i in range(len(s)):
for j in range(len(s)):
if i!=j:
print(s[i]+s[j],end=' ')
c+=1
print()
print(c)
ab ac ad ae
ba bc bd be
ca cb cd ce
da db dc de
ea eb ec ed
20
In [56]: s = 'abcde'
a = []
b = []
for i in s:
for k in s:
if i!=k:
a.append([i,k])
b.append(i+k)
print(*a)
print(*b)
print(len(a))
['a', 'b'] ['a', 'c'] ['a', 'd'] ['a', 'e'] ['b', 'a'] ['b', 'c'] ['b', 'd'] ['b', 'e'] ['c',
'a'] ['c', 'b'] ['c', 'd'] ['c', 'e'] ['d', 'a'] ['d', 'b'] ['d', 'c'] ['d', 'e'] ['e', 'a']
['e', 'b'] ['e', 'c'] ['e', 'd']
ab ac ad ae ba bc bd be ca cb cd ce da db dc de ea eb ec ed
20
In [57]: from itertools import permutations
s = 'abcde'
a = list(permutations(s,2))
print(*a)
print(len(a))
('a', 'b') ('a', 'c') ('a', 'd') ('a', 'e') ('b', 'a') ('b', 'c') ('b', 'd') ('b', 'e') ('c',
'a') ('c', 'b') ('c', 'd') ('c', 'e') ('d', 'a') ('d', 'b') ('d', 'c') ('d', 'e') ('e', 'a')
('e', 'b') ('e', 'c') ('e', 'd')
20
In [58]: from itertools import permutations,starmap
def myJoin(*a):
return ''.join(a)
s = 'abcde'
a = list(permutations(s,2))
print(*starmap(myJoin,a))
print(len(a))
ab ac ad ae ba bc bd be ca cb cd ce da db dc de ea eb ec ed
20
In [59]: from math import factorial as f
s = 'abcde'
n = len(s)
r = 3 # abc abd abe ...
P = f(n)//f(n-r)
print(P)
60
In [60]: from itertools import permutations
s = 'abcde'
a = list(permutations(s,3))
print(*starmap(myJoin,a))
print(len(a))
abc abd abe acb acd ace adb adc ade aeb aec aed bac bad bae bca bcd bce bda bdc bde bea bec be
d cab cad cae cba cbd cbe cda cdb cde cea ceb ced dab dac dae dba dbc dbe dca dcb dce dea deb
dec eab eac ead eba ebc ebd eca ecb ecd eda edb edc
60
In [61]: from math import factorial as f
s = 'abcde'
n = len(s)
r = 4 # abcd abce ...
P = f(n)//f(n-r)
print(P)
120
In [62]: from itertools import permutations
s = 'abcde'
a = list(permutations(s,4))
print(*starmap(myJoin,a))
print(len(a))
abcd abce abdc abde abec abed acbd acbe acdb acde aceb aced adbc adbe adcb adce adeb adec aebc
aebd aecb aecd aedb aedc bacd bace badc bade baec baed bcad bcae bcda bcde bcea bced bdac bdae
bdca bdce bdea bdec beac bead beca becd beda bedc cabd cabe cadb cade caeb caed cbad cbae cbda
cbde cbea cbed cdab cdae cdba cdbe cdea cdeb ceab cead ceba cebd ceda cedb dabc dabe dacb dace
daeb daec dbac dbae dbca dbce dbea dbec dcab dcae dcba dcbe dcea dceb deab deac deba debc deca
decb eabc eabd eacb eacd eadb eadc ebac ebad ebca ebcd ebda ebdc ecab ecad ecba ecbd ecda ecdb
edab edac edba edbc edca edcb
120
combination
In [63]: from math import factorial as f
s = 'abcde'
n = len(s)
r = 2 # ab ac ad ae ... (ba sanalmaidy)
C = f(n)//(f(r)*f(n-r))
print(C)
10
In [64]: s = 'abcde'
c=0
for i in range(len(s)):
for j in range(i+1,len(s)):
print(s[i]+s[j],end=' ')
c+=1
print()
print(c)
ab ac ad ae
bc bd be
cd ce
de
10
In [65]: from itertools import combinations
s = 'abcde'
a = list(combinations(s,2))
print(*starmap(myJoin,a))
print(len(a))
ab ac ad ae bc bd be cd ce de
10
In [66]: from itertools import combinations
s = 'abcde'
a = list(combinations(s,3))
print(*starmap(myJoin,a))
print(len(a))
abc abd abe acd ace ade bcd bce bde cde
10
In [67]: from math import factorial as f
s = 'abcde'
n = len(s)
r = 3 # abc abd abe acd ...
C = f(n)//(f(r)*f(n-r))
print(C)
10
In [68]: from math import factorial as f
s = 'abcde'
n = len(s)
r = 4 # abcd abce abde acde bcde
C = f(n)//(f(r)*f(n-r))
print(C)
5
In [69]: from itertools import combinations
s = 'abcde'
a = list(combinations(s,4))
print(*starmap(myJoin,a))
print(len(a))
abcd abce abde acde bcde
5
In [70]: from math import factorial as f
s = 'Kazakhstan'
n = len(s)
r=8
P = f(n)//f(n-r)
C = f(n)//(f(r)*f(n-r))
print('Permutaions:',P)
print('Combinations:',C)
from itertools import combinations
a = list(combinations(s,r))
print(*starmap(myJoin,a))
print(len(a))
Permutaions: 1814400
Combinations: 45
Kazakhst Kazakhsa Kazakhsn Kazakhta Kazakhtn Kazakhan Kazaksta Kazakstn Kazaksan Kazaktan Kaza
hsta Kazahstn Kazahsan Kazahtan Kazastan Kazkhsta Kazkhstn Kazkhsan Kazkhtan Kazkstan Kazhstan
Kaakhsta Kaakhstn Kaakhsan Kaakhtan Kaakstan Kaahstan Kakhstan Kzakhsta Kzakhstn Kzakhsan Kzak
htan Kzakstan Kzahstan Kzkhstan Kakhstan azakhsta azakhstn azakhsan azakhtan azakstan azahstan
azkhstan aakhstan zakhstan
45
6) Practics
https://codeforces.com/contests/332515 (https://codeforces.com/contests/332515)
In [ ]: