File tree Expand file tree Collapse file tree 4 files changed +169
-0
lines changed Expand file tree Collapse file tree 4 files changed +169
-0
lines changed Original file line number Diff line number Diff line change
1
+ import sys
2
+ input = sys .stdin .readline
3
+
4
+ N = int (input ())
5
+
6
+
7
+ def gcd (n1 ,n2 ):
8
+ while n2 != 0 :
9
+ if n1 < n2 :
10
+ n1 ,n2 = n2 ,n1
11
+ n1 ,n2 = n2 ,n1 % n2
12
+ return n1
13
+
14
+ arr = [int (input ()) for _ in range (N )]
15
+ K = int (input ())
16
+ dp_arr = [[- 1 ]* ((1 << N )+ 1 ) for _ in range (100 )]
17
+ #나머지가 rest만큼 남았을 때 i번째 수를 뒤에 붙인 값을 다시 나눈 나머지
18
+ rest_list = [[- 1 ] * 16 for _ in range (100 )]
19
+ def dp (rest ,bit ):
20
+ if bit == (1 << N )- 1 :
21
+ if rest == 0 :return 1
22
+ else : return 0
23
+ if dp_arr [rest ][bit ]!= - 1 :
24
+ return dp_arr [rest ][bit ]
25
+ dp_arr [rest ][bit ]= 0
26
+
27
+
28
+ for i in range (N ):
29
+ if 1 << i & bit :continue
30
+ if rest_list [rest ][i ]== - 1 :
31
+ rest_list [rest ][i ] = (rest * (10 ** len (str (arr [i ])))+ arr [i ])% K
32
+ dp_arr [rest ][bit ]+= dp (rest_list [rest ][i ],bit | 1 << i )
33
+ return dp_arr [rest ][bit ]
34
+ total = 1
35
+ for x in range (1 ,N + 1 ):
36
+ total *= x
37
+ ans = dp (0 ,0 )
38
+ if ans == 0 :
39
+ print ("0/1" )
40
+ else :
41
+ g = gcd (ans ,total )
42
+ print ("{}/{}" .format (ans // g ,total // g ))
Original file line number Diff line number Diff line change
1
+ import sys
2
+ input = sys .stdin .readline
3
+ N = int (input ())
4
+ tree = [0 ]* (N + 1 )
5
+
6
+ def get (n ):
7
+ def getIdx (idx ):
8
+ ans = 0
9
+ while idx > 0 :
10
+ ans += tree [idx ]
11
+ idx -= (idx & - idx )
12
+ return ans
13
+ st = n
14
+ ed = N
15
+ while st <= ed :
16
+ mid = (st + ed )// 2
17
+ if getIdx (mid )<= mid - n :
18
+ ed = mid - 1
19
+ else :
20
+ st = mid + 1
21
+ update (st ,1 )
22
+ return st
23
+
24
+ def update (idx , diff ):
25
+ while idx <= N :
26
+ tree [idx ]+= diff
27
+ idx += (idx & - idx )
28
+ ans = [0 ]* N
29
+ for i in range (1 ,N + 1 ):
30
+ n = int (input ())
31
+ ans [get (n + 1 )- 1 ] = i
32
+ print ('\n ' .join (map (str ,ans )))
Original file line number Diff line number Diff line change
1
+ import sys
2
+ import bisect
3
+ input = sys .stdin .readline
4
+ print = sys .stdout .write
5
+ N = int (input ())
6
+ end_max = N * 2 + 1
7
+ arr = [0 ]* (end_max + 1 )
8
+ arr [end_max // 2 ]= int (input ())
9
+ cnt = 0
10
+ print ("%d\n " % cnt )
11
+ ans = [0 ]
12
+ for _ in range (N - 1 ):
13
+ n = int (input ())
14
+ st ,ed = 0 ,end_max
15
+ mid = (st + ed )// 2
16
+ dep = 0
17
+ while arr [mid ]:
18
+ if arr [mid ]> n :
19
+ ed = mid - 1
20
+ else :
21
+ st = mid + 1
22
+ mid = (st + ed )// 2
23
+ dep += 1
24
+ arr [mid ]= n
25
+ cnt += dep
26
+ print ("%d\n " % cnt )
27
+
28
+ #N(logN) 시간 초과 실패
29
+
30
+
31
+ def sol ():
32
+ N = int (sys .stdin .readline ().rstrip ())
33
+ MAX_N = 300000
34
+ left = [0 ] * (MAX_N + 2 )
35
+ right = [0 ] * (MAX_N + 2 )
36
+ lev = [0 ] * (MAX_N + 2 )
37
+ data = [0 ] * (MAX_N + 1 )
38
+ C = 0
39
+ result = []
40
+ for i in range (1 , N + 1 ):
41
+ data [i ] = int (sys .stdin .readline ().rstrip ())
42
+ left [i ] = i - 1
43
+ right [i ] = i + 1
44
+ for i in range (N , - 1 , - 1 ):
45
+ right [left [data [i ]]] = right [data [i ]]
46
+ left [right [data [i ]]] = left [data [i ]]
47
+ lev [0 ] = lev [N + 1 ] = - 1
48
+ for i in range (1 , N + 1 ):
49
+ lev [data [i ]] = max (lev [left [data [i ]]], lev [right [data [i ]]]) + 1
50
+ C += lev [data [i ]]
51
+ result .append (str (C ))
52
+ print ('\n ' .join (result ))
53
+
54
+
55
+ if __name__ == "__main__" :
56
+ sol ()
Original file line number Diff line number Diff line change
1
+ import sys
2
+ input = sys .stdin .readline
3
+
4
+
5
+ def gcd (n1 ,n2 ):
6
+ while n2 != 0 :
7
+ if n1 < n2 :
8
+ n1 ,n2 = n2 ,n1
9
+ n1 ,n2 = n2 ,n1 % n2
10
+ return n1
11
+
12
+ def extension_gcd (n1 ,n2 ):
13
+ tmp = n1
14
+ t ,t1 ,t2 = 0 ,0 ,1
15
+ while n2 != 0 :
16
+ q = n1 // n2
17
+ r = n1 % n2
18
+ t = t1 - q * t2
19
+ n1 = n2
20
+ n2 = r
21
+ t1 = t2
22
+ t2 = t
23
+ while t1 < 0 :t1 += tmp
24
+ return t1
25
+
26
+ T = int (input ())
27
+ while T :
28
+ T -= 1
29
+ a ,b = map (int ,input ().split ())
30
+ if b == 1 :
31
+ if a + 1 > 1e9 :print ("IMPOSSIBLE" )
32
+ else :print (a + 1 )
33
+ elif a == 1 :
34
+ print (1 )
35
+ elif gcd (a ,b )!= 1 :print ("IMPOSSIBLE" )
36
+ else :
37
+ ans = extension_gcd (a ,b )
38
+ if ans > 1e9 :print ("IMPOSSIBLE" )
39
+ else :print (ans )
You can’t perform that action at this time.
0 commit comments