Skip to content

Commit 6467450

Browse files
committed
"2021.04.02"
1 parent 2640fd9 commit 6467450

File tree

4 files changed

+297
-0
lines changed

4 files changed

+297
-0
lines changed

java/src/Main_14427.java

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
import java.io.BufferedReader;
2+
import java.io.IOException;
3+
import java.io.InputStreamReader;
4+
import java.util.ArrayList;
5+
import java.util.Arrays;
6+
import java.util.List;
7+
import java.util.StringTokenizer;
8+
9+
public class Main_14427 {
10+
static StringTokenizer st;
11+
static int N, size;
12+
static int[] tree;
13+
static int[] arr;
14+
public static void main(String[] args) throws IOException{
15+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
16+
st = new StringTokenizer(br.readLine());
17+
N = Integer.parseInt(st.nextToken());
18+
size = 1;
19+
while (size<=N){
20+
size<<=1;
21+
}
22+
tree = new int[size*2];
23+
Arrays.fill(tree,-1);
24+
arr = new int[N];
25+
st = new StringTokenizer(br.readLine());
26+
for(int i = 0 ; i<N;i++){
27+
arr[i] = Integer.parseInt(st.nextToken());
28+
tree[size+i]=i;
29+
}
30+
int ed = size;
31+
while(ed>1){
32+
int start = ed>>1;
33+
for(int i = start; i<ed;i++){
34+
int l = tree[i<<1], r = tree[i<<1|1];
35+
if(l==-1) break;
36+
if(r==-1 || arr[l]<=arr[r]) tree[i] = l;
37+
else tree[i]=r;
38+
}
39+
ed=start;
40+
}
41+
st = new StringTokenizer(br.readLine());
42+
int M = Integer.parseInt(st.nextToken());
43+
for(int i = 0; i<M;i++){
44+
String[] input = br.readLine().strip().split(" ");
45+
if(input.length==1) System.out.println(tree[1]+1);
46+
else update(Integer.parseInt(input[1])-1,Integer.parseInt(input[2]));
47+
}
48+
}
49+
50+
static void update(int idx, int v){
51+
arr[idx] = v;
52+
int start = (size+idx)>>1;
53+
while(start>0){
54+
int l = tree[start<<1], r = tree[start<<1|1];
55+
if(r==-1 || arr[l]<=arr[r]) tree[start] = l;
56+
else tree[start] = r;
57+
start>>=1;
58+
}
59+
}
60+
}

java/src/Main_17071.java

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
import java.io.BufferedReader;
2+
import java.io.IOException;
3+
import java.io.InputStreamReader;
4+
import java.util.*;
5+
6+
public class Main_17071 {
7+
static StringTokenizer st;
8+
static int N, K;
9+
static int ans = 0;
10+
static boolean[][] visited = new boolean[2][500001];
11+
static Queue<Integer> queue;
12+
public static void main(String args[]) throws IOException {
13+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
14+
st = new StringTokenizer(br.readLine());
15+
N = Integer.parseInt(st.nextToken());
16+
K = Integer.parseInt(st.nextToken());
17+
for(int i = 0 ; i<2;i++) Arrays.fill(visited[i],false);
18+
queue = new LinkedList<>();
19+
queue.add(N);
20+
System.out.println(sol());
21+
}
22+
23+
24+
static int sol(){
25+
if(N==K) return 0;
26+
int ret = 1;
27+
while(queue.size()>0){
28+
int size = queue.size();
29+
K+=ret;
30+
if (K>500000) return -1;
31+
if(visited[ret%2][K]) return ret;
32+
while (size>0){
33+
size-=1;
34+
int tmp = queue.poll();
35+
if(tmp+1==K || tmp-1 == K || tmp<<1 == K) return ret;
36+
if(tmp+1<=500000 && !visited[ret%2][tmp+1]){
37+
visited[ret%2][tmp+1] = true;
38+
queue.add(tmp+1);
39+
}
40+
if(tmp-1>0 && !visited[ret%2][tmp-1]){
41+
visited[ret%2][tmp-1] = true;
42+
queue.add(tmp-1);
43+
}
44+
if(tmp<<1 <= 500000 && !visited[ret%2][tmp<<1]){
45+
visited[ret%2][tmp<<1] = true;
46+
queue.add(tmp<<1);
47+
}
48+
}
49+
ret+=1;
50+
}
51+
return -1;
52+
}
53+
54+
}

java/src/Main_18809.java

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
import java.io.BufferedReader;
2+
import java.io.IOException;
3+
import java.io.InputStreamReader;
4+
import java.util.*;
5+
import java.util.concurrent.atomic.AtomicInteger;
6+
7+
public class Main_18809 {
8+
static StringTokenizer st;
9+
static int N, M, G, R;
10+
static int[][] arr, visited;
11+
static Queue<Node> queue;
12+
static int[] dy = {0,0,-1,1};
13+
static int[] dx = {-1,1,0,0};
14+
static ArrayList<Node> target, tmp;
15+
static int ans=0;
16+
public static void main(String[] args) throws IOException{
17+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
18+
st = new StringTokenizer(br.readLine());
19+
N = Integer.parseInt(st.nextToken());
20+
M = Integer.parseInt(st.nextToken());
21+
G = Integer.parseInt(st.nextToken());
22+
R = Integer.parseInt(st.nextToken());
23+
arr = new int[N][M];
24+
visited = new int[N][M];
25+
target = new ArrayList<>();
26+
for(int i = 0; i<N;i++){
27+
st = new StringTokenizer(br.readLine());
28+
for(int j = 0 ; j< M;j++){
29+
arr[i][j] = Integer.parseInt(st.nextToken());
30+
if(arr[i][j]==2) target.add(new Node(i,j));
31+
}
32+
}
33+
sol(0,R,G);
34+
System.out.println(ans);
35+
}
36+
static void sol(int idx, int red, int green){
37+
if(red+green==0) {
38+
for (int i = 0; i<N;i++){
39+
if (M >= 0) System.arraycopy(arr[i], 0, visited[i], 0, M);
40+
}
41+
ans = Math.max(ans,bfs());
42+
return;
43+
}
44+
if(idx<target.size()){
45+
if(red>0){
46+
Node node = target.get(idx);
47+
arr[node.y][node.x]=3;
48+
sol(idx+1,red-1,green);
49+
arr[node.y][node.x]=2;
50+
}
51+
if(green>0){
52+
Node node = target.get(idx);
53+
arr[node.y][node.x]=4;
54+
sol(idx+1,red,green-1);
55+
arr[node.y][node.x]=2;
56+
}
57+
sol(idx+1,red,green);
58+
}
59+
}
60+
61+
//visited에 배양액 뿌린 곳 표시 후, queue에 넣어서 시작
62+
static int bfs(){
63+
int ret = 0;
64+
queue = new LinkedList<>();
65+
boolean[][] check = new boolean[N][M];
66+
for(int i = 0; i<N;i++) for(int j = 0;j<M;j++) if(visited[i][j]>2) queue.add(new Node(i,j));
67+
while (!queue.isEmpty()) {
68+
tmp = new ArrayList<>();
69+
int size = queue.size();
70+
while(size>0){
71+
size--;
72+
Node node = queue.poll();
73+
int y = node.y, x = node.x;
74+
for (int i = 0; i < 4; i++) {
75+
int ny = y + dy[i], nx = x + dx[i];
76+
if (ny < 0 || ny >= N || nx < 0 || nx >= M) continue;
77+
if (visited[y][x]==3 || visited[y][x]==5) {
78+
if(visited[ny][nx]==6 && !check[ny][nx]){
79+
visited[ny][nx]=7;
80+
ret++;
81+
}else if(visited[ny][nx]==2||visited[ny][nx]==1){
82+
visited[ny][nx]=5;
83+
queue.add(new Node(ny,nx));
84+
tmp.add(new Node(ny,nx));
85+
}
86+
}else if(visited[y][x]==4 || visited[y][x]==6){
87+
if(visited[ny][nx]==5 && !check[ny][nx]){
88+
visited[ny][nx]=7;
89+
ret++;
90+
}else if(visited[ny][nx]==2||visited[ny][nx]==1){
91+
visited[ny][nx]=6;
92+
queue.add(new Node(ny,nx));
93+
tmp.add(new Node(ny,nx));
94+
}
95+
}
96+
}
97+
}
98+
tmp.forEach(node -> {
99+
check[node.y][node.x]=true;
100+
});
101+
}
102+
return ret;
103+
}
104+
105+
static class Node{
106+
int y;
107+
int x;
108+
public Node(int y, int x){
109+
this.y = y;
110+
this.x = x;
111+
}
112+
113+
@Override
114+
public String toString() {
115+
return "Node{" +
116+
"y=" + y +
117+
", x=" + x +
118+
'}';
119+
}
120+
}
121+
}

java/src/Main_2632.java

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
import java.io.BufferedReader;
2+
import java.io.IOException;
3+
import java.io.InputStreamReader;
4+
import java.util.Arrays;
5+
import java.util.StringTokenizer;
6+
7+
public class Main_2632 {
8+
static StringTokenizer st;
9+
static int[] pA, pB;
10+
static int[] pizzaA, pizzaB;
11+
static int N, A, B;
12+
public static void main(String[] args) throws IOException{
13+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
14+
st = new StringTokenizer(br.readLine());
15+
N = Integer.parseInt(st.nextToken());
16+
pizzaA = new int[N+1];
17+
pizzaB = new int[N+1];
18+
Arrays.fill(pizzaA,0);
19+
Arrays.fill(pizzaB,0);
20+
pizzaA[0]=1;
21+
pizzaB[0]=1;
22+
st = new StringTokenizer(br.readLine());
23+
A = Integer.parseInt(st.nextToken());
24+
B = Integer.parseInt(st.nextToken());
25+
pA = new int[A];
26+
pB = new int[B];
27+
int maxPA = 0, maxPB=0;
28+
for(int i = 0; i<A; i++){
29+
st = new StringTokenizer(br.readLine());
30+
pA[i] = Integer.parseInt(st.nextToken());
31+
maxPA+=pA[i];
32+
}
33+
for(int i = 0; i<B; i++){
34+
st = new StringTokenizer(br.readLine());
35+
pB[i] = Integer.parseInt(st.nextToken());
36+
maxPB+=pB[i];
37+
}
38+
for(int i = 0;i<A;i++) getPizzaA(i,(i+1)%A,pA[i]);
39+
for(int i = 0;i<B;i++) getPizzaB(i,(i+1)%B,pB[i]);
40+
if(maxPA<=N) pizzaA[maxPA]=1;
41+
if(maxPB<=N) pizzaB[maxPB]=1;
42+
int ans = 0,l,r;
43+
for(int i = 0;i<=N;i++){
44+
l = i;
45+
r = N-i;
46+
ans+=pizzaA[l]*pizzaB[r];
47+
}
48+
System.out.println(ans);
49+
}
50+
51+
public static void getPizzaA(int start, int now, int p){
52+
if(now==start || p>N) return;
53+
pizzaA[p]+=1;
54+
getPizzaA(start,(now+1)%A,p+pA[now]);
55+
}
56+
57+
public static void getPizzaB(int start, int now, int p){
58+
if(now==start || p>N) return;
59+
pizzaB[p]+=1;
60+
getPizzaB(start,(now+1)%B,p+pB[now]);
61+
}
62+
}

0 commit comments

Comments
 (0)