Skip to content

Commit 887919c

Browse files
committed
2021.01.30
1 parent 8f5278e commit 887919c

File tree

4 files changed

+192
-0
lines changed

4 files changed

+192
-0
lines changed

python/plat3/1006.py

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
import sys
2+
input = sys.stdin.readline
3+
4+
e = [[0,0] for _ in range(10001)]
5+
a = [0]*10001
6+
b = [0]*10001
7+
c = [0]*10001
8+
9+
def sol(st):
10+
global N,W
11+
for i in range(st,N):
12+
a[i+1]=min(b[i]+1,c[i]+1)
13+
if e[i][0] + e[i][1]<=W:
14+
a[i+1]=min(a[i+1],a[i]+1)
15+
if i>0 and e[i-1][0]+e[i][0]<=W and e[i-1][1]+e[i][1]<=W:
16+
a[i+1]=min(a[i+1],a[i-1]+2)
17+
if i<N-1:
18+
b[i+1] = a[i+1]+1
19+
if e[i][0]+e[i+1][0]<=W:
20+
b[i+1] = min(b[i+1],c[i]+1)
21+
c[i+1] = a[i+1]+1
22+
if e[i][1]+e[i+1][1]<=W:
23+
c[i+1] = min(c[i+1],b[i]+1)
24+
T = int(input())
25+
while T:
26+
T-=1
27+
N , W = map(int,input().split())
28+
for i,num in enumerate(list(map(int,input().split()))):
29+
e[i][0]=num
30+
for i,num in enumerate(list(map(int,input().split()))):
31+
e[i][1]=num
32+
a[0]=0
33+
b[0]=1
34+
c[0]=1
35+
sol(0)
36+
res = min(1e9,a[N])
37+
if N>1 and e[0][0]+e[N-1][0]<=W:
38+
a[1] = 1
39+
b[1] = 2
40+
c[1] = 1 if e[0][1]+e[1][1]<=W else 2
41+
sol(1)
42+
res = min(res,c[N-1]+1)
43+
if N>1 and e[0][1]+e[N-1][1]<=W:
44+
a[1] = 1
45+
b[1] = 1 if e[0][0]+e[1][0]<=W else 2
46+
c[1] = 2
47+
sol(1)
48+
res = min(res,b[N-1]+1)
49+
if N>1 and e[0][0]+e[N-1][0]<=W and e[0][1]+e[N-1][1]<=W:
50+
a[1] = 0
51+
b[1], c[1] = 1,1
52+
sol(1)
53+
res = min(res,a[N-1]+2)
54+
print(res)
55+

python/plat3/12844.py

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
import sys
2+
input = sys.stdin.readline
3+
output = sys.stdout.write
4+
5+
N = int(input())
6+
st = 1
7+
while st<N:
8+
st<<=1
9+
tree = [0]*(st*2)
10+
temp = st
11+
tree[st:st+N] = list(map(int,input().split()))
12+
while temp>1:
13+
ed = temp
14+
temp = temp>>1
15+
for i in range(temp,ed):
16+
tree[i]=tree[i<<1]^tree[i<<1|1]
17+
lazy = [0]*(st*2)
18+
19+
def propagate(node, ns, ne):
20+
if lazy[node]:
21+
if (ne-ns+1)%2:
22+
tree[node]^=lazy[node]
23+
if ns!=ne:
24+
lazy[node<<1]^=lazy[node]
25+
lazy[node<<1|1]^=lazy[node]
26+
lazy[node]=0
27+
return
28+
29+
def update(ns,ne,s,e,node,k):
30+
propagate(node,ns,ne)
31+
if ns>e or ne<s:return
32+
if s<=ns and ne<=e:
33+
if (ne-ns+1)%2:
34+
tree[node]^=k
35+
if ns!=ne:
36+
lazy[node<<1] ^= k
37+
lazy[node<<1|1] ^= k
38+
return
39+
mid = (ns+ne)>>1
40+
update(ns,mid,s,e,node<<1,k)
41+
update(mid+1,ne,s,e,node<<1|1,k)
42+
tree[node]=tree[node<<1]^tree[node<<1|1]
43+
44+
def query(ns,ne,s,e,node):
45+
propagate(node,ns,ne)
46+
if e<ns or s>ne:return 0
47+
if s<=ns and ne<=e:
48+
return tree[node]
49+
mid = (ne+ns)>>1
50+
return query(ns,mid,s,e,node<<1)^query(mid+1,ne,s,e,node<<1|1)
51+
52+
for _ in range(int(input())):
53+
row = list(map(int,input().split()))
54+
if row[0]==1:
55+
update(1,st,row[1]+1,row[2]+1,1,row[3])
56+
else:
57+
output("%d\n"%query(1,st,row[1]+1,row[2]+1,1))

python/plat3/1867.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import sys
2+
input = sys.stdin.readline
3+
4+
n, k = map(int,input().split())
5+
6+
adj = [[] for _ in range(n)]
7+
for _ in range(k):
8+
y,x = map(int,input().split())
9+
adj[y-1].append(x-1)
10+
11+
p = [-1]*(n)
12+
13+
def bfs(idx):
14+
visited[idx]=True
15+
for nx in adj[idx]:
16+
if p[nx]==-1 or (not visited[p[nx]] and bfs(p[nx])):
17+
p[nx]=idx
18+
return True
19+
20+
return False
21+
ans = 0
22+
for i in range(n):
23+
visited=[False]*n
24+
if bfs(i):ans+=1
25+
print(ans)

python/plat3/9525.py

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
import sys
2+
input = sys.stdin.readline
3+
4+
N = int(input())
5+
arr = [list(map(str,input().strip())) for _ in range(N)]
6+
7+
right = [[0]*N for _ in range(N)]
8+
down = [[0]*N for _ in range(N)]
9+
r,d=1,1
10+
for x in range(N):
11+
flag = False
12+
for y in range(N):
13+
if arr[y][x]=='.':
14+
if flag:
15+
d+=1
16+
flag=False
17+
down[y][x]=d
18+
else:
19+
flag=True
20+
d+=1
21+
for y in range(N):
22+
flag = False
23+
for x in range(N):
24+
if arr[y][x]=='.':
25+
if flag:
26+
r+=1
27+
flag=False
28+
right[y][x]=r
29+
else:
30+
flag=True
31+
r+=1
32+
adj = [[] for _ in range(r)]
33+
for y in range(N):
34+
for x in range(N):
35+
if arr[y][x]=='.':
36+
adj[right[y][x]].append(down[y][x])
37+
N_max = N*N+1
38+
p = [-1]*(N_max)
39+
b = [-1]*(N_max)
40+
def dfs(idx):
41+
if visited[idx]:return False
42+
visited[idx]=True
43+
for nx in adj[idx]:
44+
if p[nx]==-1 or dfs(p[nx]):
45+
p[nx]=idx
46+
b[idx]=nx
47+
return True
48+
return False
49+
50+
ans = 0
51+
for i in range(1,r):
52+
if b[i]==-1:
53+
visited = [False]*r
54+
if dfs(i):ans+=1
55+
print(ans)

0 commit comments

Comments
 (0)