Skip to content

Commit c5b315e

Browse files
committed
2957.py TLE (2021.01.08)
1 parent b6044ee commit c5b315e

File tree

4 files changed

+169
-0
lines changed

4 files changed

+169
-0
lines changed

python/plat5/1086.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
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))

python/plat5/1849.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
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)))

python/plat5/2957.py

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
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()

python/plat5/3955.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
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)

0 commit comments

Comments
 (0)