code v2

 avatar
unknown
plain_text
2 years ago
19 kB
1
Indexable
hugo dao vang
package day16_2006;

//import java.io.FileInputStream;
//import java.io.FileNotFoundException;
import java.util.Scanner;


class MyQueue{
	private int front, rear, max, cnt;
	private int[] q;
	
	public MyQueue(int a) {
		// TODO Auto-generated constructor stub
		front = 0;
		rear = -1;
		max = a;
		cnt = 0;
		q = new int[a];
	}
	
	public boolean isEmpty() {
		return cnt == 0;
	}
	
	public void enqueue(int a) {
		rear = (rear + 1) % max;
		q[rear] = a;
		cnt++;
	}
	
	public int dequeue() {
		int a = q[front];
		front = (front + 1) % max;
		cnt--;
		return a;
	}
}

public class hugo_v2 {
	
	static int row, col, hugox, hugoy, fi, li, oi, ans;
	static int[][] diamond, fire, lake, out, visit;
	static int[][] d = {{-1, 0, 1, 0}, {0, 1, 0, -1}};
	static MyQueue fqx, fqy;
	
	
	
	private static void bfsFire(){
		int r, c, dr, dc;
		while(!fqx.isEmpty()){
			r = fqx.dequeue(); c = fqy.dequeue();
			for(int i = 0; i < 4; i++){
				dr = r + d[0][i]; dc = c + d[1][i];
				if(dr >= 0 && dr < row && dc >= 0 && dc < col && fire[dr][dc] == -1 && lake[dr][dc] != 1){
					fire[dr][dc] = fire[r][c] + 1; 
					fqx.enqueue(dr); fqy.enqueue(dc);
				}
			}
		}
	}
	
	private static void backtrackHugo(int r, int c, int sum){
		
		if(out[r][c] == 1){
			if(ans < sum) ans = sum;
//			return;
		}
		
		int dr, dc;
		for(int i = 0; i < 4; i++){
			dr = r + d[0][i]; dc = c + d[1][i]; 
			if(dr >= 0 && dr < row && dc >= 0 && dc < col && visit[dr][dc] == -1){
				if(lake[dr][dc] == 1){
					 visit[dr][dc] = visit[r][c] + 2;
					 backtrackHugo(dr, dc, sum + diamond[dr][dc]);
					 visit[dr][dc] = -1;
				}
				else if(visit[r][c] + 1 < fire[dr][dc] ||fire[dr][dc] == -1){
					visit[dr][dc] = visit[r][c] + 1;
					backtrackHugo(dr, dc, sum + diamond[dr][dc]);
					visit[dr][dc] = -1;
				}
			}
		}
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
//		try {
//			System.setIn(new FileInputStream("D:\\Trainee\\SRV_training\\src\\day16_2006\\hugo.txt"));
//		} catch (FileNotFoundException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
		Scanner sc = new Scanner(System.in);
		int testcase = sc.nextInt();
		for(int tc = 1; tc <= testcase; tc++){
			row = sc.nextInt(); col = sc.nextInt();
			hugox = sc.nextInt() - 1; hugoy = sc.nextInt() - 1;
			int a, b;
			fi = sc.nextInt();
			
			diamond = new int[row][col];
			fire = new int[row][col];
			lake = new int[row][col];
			out = new int[row][col];
			visit = new int[row][col];
			fqx = new MyQueue(row * col);
			fqy = new MyQueue(row * col);
			
			
			for(int i = 0; i < row; i++){
				for(int j = 0; j < col; j++){
					fire[i][j] = -1;
					visit[i][j] = -1;
				}
			}
			visit[hugox][hugoy] = 0;
			
			for(int i = 0; i < fi; i++){
				a = sc.nextInt() - 1; b = sc.nextInt() - 1;
				fire[a][b] = 0;
				fqx.enqueue(a); fqy.enqueue(b);
			}
			
			li = sc.nextInt();
			for(int i = 0; i < li; i++){
				a = sc.nextInt() - 1; b = sc.nextInt() - 1;
				lake[a][b] = 1;
			}
			
			oi = sc.nextInt();
			for(int i = 0; i < oi; i++){
				a = sc.nextInt() - 1; b = sc.nextInt() - 1;
				out[a][b] = 1;
			}
			
			for(int i = 0; i < row; i++){
				for(int j = 0; j < col; j++){
					diamond[i][j] = sc.nextInt();
				}
			}
			
			bfsFire();
			ans = -1;
			backtrackHugo(hugox, hugoy, diamond[hugox][hugoy]);
			System.out.println("Case #" + tc);
			System.out.println(ans);
			
		}
	}
}

#########################################################################################################
pipe network
package day16_2006;

import java.util.Scanner;

public class pipe_network {
	
	static int[][] ngang = {{1, 0, 1, 1, 1, 0, 0},
						   {0, 0, 0, 0, 0, 0, 0},
						   {1, 0, 1, 1, 1, 0, 0},
						   {0, 0, 0, 0, 0, 0, 0},
						   {0, 0, 0, 0, 0, 0, 0},
						   {1, 0, 1, 1, 1, 0, 0},
						   {1, 0, 1, 1, 1, 0, 0}},
				   doc = {{1, 1, 0, 0, 1, 1, 0},
						 {1, 1, 0, 0, 1, 1, 0},
						 {0, 0, 0, 0, 0, 0, 0},
						 {1, 1, 0, 0, 1, 1, 0},
						 {0, 0, 0, 0, 0, 0, 0},
						 {0, 0, 0, 0, 0, 0, 0},
						 {1, 1, 0, 0, 1, 1, 0}};
	static int row, col, sx, sy, limit, ans;
	static int startx, starty, endx, endy;
	static int[][] visit;
	static int[][] map;
	
	private static void BFS(){
		MyQueue qx = new MyQueue(row * col);
		MyQueue qy = new MyQueue(row * col);
		qx.enqueue(sx); qy.enqueue(sy);
		
		int x, y, dx, dy, val1, val2;
		
		while(!qx.isEmpty()){
			x = qx.dequeue(); y = qy.dequeue();
			val1 = map[x][y];
			
			if(visit[x][y] < limit){
				//up
				dx = x - 1; dy = y;
				if(dx >= 0 && visit[dx][dy] == 0){
					val2 = map[dx][dy];
					if(doc[val1][val2] == 1){
						visit[dx][dy] = visit[x][y] + 1;
						ans++;
						qx.enqueue(dx); qy.enqueue(dy);
					}
				}
				
				//right
				dx = x; dy = y + 1;
				if(dy < col && visit[dx][dy] == 0){
					val2 = map[dx][dy];
					if(ngang[val2][val1] == 1){
						visit[dx][dy] = visit[x][y] + 1;
						ans++;
						qx.enqueue(dx); qy.enqueue(dy);
					}
				}
				
				//down
				dx = x + 1; dy = y;
				if(dx <= endx && visit[dx][dy] == 0){
					val2 = map[dx][dy];
					if(doc[val2][val1] == 1){
						visit[dx][dy] = visit[x][y] + 1;
						ans++;
						qx.enqueue(dx); qy.enqueue(dy);
					}
				}
				
				//left
				dx = x; dy = y - 1;
				if(dy >= starty && visit[dx][dy] == 0){
					val2 = map[dx][dy];
					if(ngang[val1][val2] == 1){
						visit[dx][dy] = visit[x][y] + 1;
						ans++;
						qx.enqueue(dx); qy.enqueue(dy);
					}
				}
				
			}
		}
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Scanner sc = new Scanner(System.in);
		int testcase = sc.nextInt();
		for(int tc = 1; tc <= testcase; tc++){
			row = sc.nextInt(); col = sc.nextInt();
			sx = sc.nextInt(); sy = sc.nextInt();
			limit = sc.nextInt();

			visit = new int[row][col];
			visit[sx][sy] = 1;
			map = new int[row][col];
			for(int i = 0; i < row; i++){
				for(int j = 0; j < col; j++){
					map[i][j] = sc.nextInt() - 1;
					if(map[i][j] == -1) visit[i][j] = -1;
				}
			}
			
			
			startx = sx - limit > 0 ? sx - limit : 0;
			endx = sx + limit < row ? sx + limit : row - 1;
			starty = sy - limit > 0 ? sy - limit : 0;
			endy = sx + limit < col ? sy + limit : col - 1;
			
			ans = 1;
			BFS();
			System.out.println("Case #" + tc + " " + ans);
			
		}
	}
}
#######################################################################################
mountain walking

package day17_2106;

import java.util.Scanner;

public class mountain_walkingv2 {
	static int n, ans, max, min;
	static int[][] map, d = {{-1, 0, 1, 0}, {0, 1, 0, -1}};
	static boolean[] visit;
	
	private static boolean bfs(int start, int end){
		MyQueue qx = new MyQueue(n * n);
		MyQueue qy = new MyQueue(n * n);
		boolean[][] visit;
		if(map[0][0] >= start && map[0][0] <= end){
			qx.enqueue(0); qy.enqueue(0);
			visit = new boolean[n][n];
			visit[0][0] = true;
		}
		else return false;
		
		int x, y, dx, dy;
		while(!qx.isEmpty()){
			x = qx.dequeue(); y = qy.dequeue();
			for(int i = 0; i < 4; i++){
				dx = x + d[0][i]; dy = y + d[1][i];
				if(dx >= 0 && dy >= 0 && dx < n && dy < n && !visit[dx][dy] && map[dx][dy] >= start && map[dx][dy] <= end){
					visit[dx][dy] = true;
					qx.enqueue(dx); qy.enqueue(dy);
					if(dx == n - 1 && dy == n - 1) return true;
				}
			}
		}
		
		return false;
	}
	
	private static boolean isValid(int mid){
		for(int i = min; i <= max - mid; i++){
			if(bfs(i, i + mid)) return true;
		}
		return false;
	}
	
	private static void solve(int dist, int left, int right){
		while(!visit[dist]){
			visit[dist] = true;
			if(isValid(dist)){
				ans = right = dist;
			}
			
			else{
				left = dist;
			}
			dist = left + (right - left)/2;
		}
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Scanner sc = new Scanner(System.in);
		int testcase = sc.nextInt();
		for(int tc = 1; tc <= testcase; tc++){
			n = sc.nextInt();
			max = 0; min = Integer.MAX_VALUE;
			map = new int[n][n];
			for(int i = 0; i < n; i++){
				for(int j = 0; j < n; j++){
					map[i][j] = sc.nextInt();
					if(map[i][j] < min) min = map[i][j];
					if(map[i][j] > max) max = map[i][j];
				}
			}
			
			ans = -1;
			visit = new boolean[max + 1];
			solve((max - min)/2, 0, max - min + 1);
			
			System.out.println("#" + tc + " " + ans);
		}
	}

}

#########################################################################################################

ban bong
package day18_2206;

import java.util.Scanner;

public class ban_bong {
	
	static int n;
	static long score;
	static int[] bubble, hoanvi;
	static boolean[] visit;
	
	
	private static long ban(int idx){
		long mul = 1;
		
		int left = idx, right = idx;
		while(right < n && visit[right])right++;
		while(left >= 0 && visit[left]) left--;
		
		if(right >= n && left < 0) return bubble[idx];
		if(right < n) mul *= bubble[right];
		if(left >= 0) mul *= bubble[left];
		return mul;
	}
	
	private static void solve(int cnt, long sum){
		
		if(cnt == n){
			score = score < sum ? sum : score;
		}
		
		for(int i = 0; i < n; i++){
			if(!visit[i]){
				visit[i] = true;
				long tmp = ban(i);
				solve(cnt + 1, sum + tmp);
				visit[i] = false;
			}
		}
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Scanner sc = new Scanner(System.in);
		int testcase = sc.nextInt();
		for(int tc = 1; tc <= testcase; tc++){
			n = sc.nextInt();
			bubble = new int[n];
			visit = new boolean[n];
			for(int i = 0; i < n; i++){
				bubble[i] = sc.nextInt();
			}
			
			score = 0;
			solve(0, 0);
			System.out.println("#" + tc + " " + score);
		}
	}

}
#####################################################################################################
minimal big sum
package day18_2206;

import java.util.Scanner;

public class minimal_big_sum {
	
	static int k, n, ans, total, max;
	static int[] numbers, blocks;
	
//	private static int solve(){
//		int max = 0;
//		int start = 0, sum, j;
//		for(int i = 1; i < k; i++){
//			if(blocks[i] == n) return total;
//			if(blocks[i] != 0){
//				sum = 0; j = 0;
//				while(j < blocks[i]){
//					sum += numbers[start + j];
//					j++;
//				}
//				start += blocks[i];
//				max = max < sum ? sum : max;
//				if(max >= ans) return ans;
//			}
//		}
//		return max;
//	}
	
//	private static void sinh(int b, int cnt){
//		
//		if(b == k - 1){
//			blocks[b] = n - cnt;
//			int tmp = solve();
//			if(ans > tmp) ans = tmp;
//			return;
//		}
//		
//		for(int i = 0; i <= n; i++){
//			if(cnt + i <= n){
//				blocks[b] = i;
//				sinh(b + 1, cnt + i);
//			}
//			else break;
//		}
//	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Scanner sc = new Scanner(System.in);
		int testcase = sc.nextInt();
		for(int tc = 1; tc <= testcase; tc++){
//			k = sc.nextInt() + 1;
			k = sc.nextInt();
			n = sc.nextInt();
//			blocks = new int[k];
			
			total = 0; max = 0;
			numbers = new int[n];
			for(int i = 0; i < n; i++){
				numbers[i] = sc.nextInt();
				total += numbers[i];
				max = max < numbers[i] ? numbers[i] : max;
			}
			ans = total;
//			sinh(1, 0);
			
			for(int i = max; i <= total; i++){
				int sum = 0, cnt = 1;
				for(int j = 0; j < n; j++){
					if(sum + numbers[j] > i){
						sum = numbers[j];
						cnt++;
					}
					else{
						sum += numbers[j];
					}
				}
				
				if(cnt <= k){
					ans = i;
					break;
				}
			}
			
			System.out.println("#" + tc + " " + ans);
		}
		
	}

}
###########################################################################
grid cell
package day19_2306;

import java.util.Scanner;

class MyQueue{
	private int front, rear, max, cnt;
	private int[] q;
	
	public MyQueue(int a) {
		// TODO Auto-generated constructor stub
		front = 0;
		rear = -1;
		max = a;
		cnt = 0;
		q = new int[a];
	}
	
	public boolean isEmpty() {
		return cnt == 0;
	}
	
	public void enqueue(int a) {
		rear = (rear + 1) % max;
		q[rear] = a;
		cnt++;
	}
	
	public int dequeue() {
		int a = q[front];
		front = (front + 1) % max;
		cnt--;
		return a;
	}
}

public class grid_cell {
	
	static int row, col, xpour, ypour;
	static int xSpecial, ySpecial, numMetal, time;
	static int[][] map, d = {{-1, 0, 1, 0}, {0, 1, 0, -1}};
	static int[][] visit;
	static boolean fillS;
	static MyQueue qx, qy;
	
	private static void BFS(){
		qx = new MyQueue(row * col);
		qy = new MyQueue(row * col);
		qx.enqueue(xpour); qy.enqueue(ypour);
		fillS = false;
		
		int x, y, dx, dy;
		while(!qx.isEmpty()){
			x = qx.dequeue(); y = qy.dequeue();
			for(int i = 0; i < 4; i++){
				dx = x + d[0][i]; dy = y + d[1][i];
				if(dx < row && dy < col && dx >= 0 && dy >= 0 && visit[dx][dy]== 0 && map[dx][dy] == 1){
					time = visit[dx][dy] = visit[x][y] + 1;
					qx.enqueue(dx); qy.enqueue(dy);
					if(checkSpecial() && !fillS){
						visit[xSpecial][ySpecial] = visit[x][y] + 1;
						fillS = true;
					}
					
				}
			}
		}
		
	}
	
	private static boolean checkMeltSpecial(){
		int dx, dy;
		for(int i = 0; i < 4; i++){
			dx = xSpecial + d[0][i]; dy = ySpecial + d[1][i];
			if(dx < 0 || dy < 0 || dx >= row || dy >= col || visit[dx][dy] == -1) return false;
		}
		return true;
	}
	
	private static boolean checkSpecial(){
		int dx, dy;
		for(int i = 0; i < 4; i++){
			dx = xSpecial + d[0][i]; dy = ySpecial + d[1][i];
			if(visit[dx][dy] == 0) return false;
		}
		return true;
	}
	
	private static boolean checkFullMelted(){
		if(!fillS) return false;
		else
		{
			for(int i = 0; i < row; i++){
				for(int j = 0; j < col; j++){
					if(visit[i][j] == 0) return false;
				}
			}
		}
		
		return true;
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		
		Scanner sc = new Scanner(System.in);
		int testcase = sc.nextInt();
		for(int tc = 1; tc <= testcase; tc++){
			row = sc.nextInt();  col = sc.nextInt();
			xpour = sc.nextInt() - 1; ypour = sc.nextInt() - 1;
			
			map = new int[row][col];
			visit = new int[row][col];
			for(int i = 0; i < row; i++){
				for(int j = 0; j < col; j++){
					map[i][j] = sc.nextInt();
					if(map[i][j] == 0) visit[i][j] = -1;
					else if(map[i][j] == 2){
						xSpecial = i; ySpecial = j;
					}
				}
			}
			

			System.out.println("Case #" + tc);
			if(map[xpour][ypour] == 0 || !checkMeltSpecial()){
				System.out.println(-1 + " " + -1);
			}
			else
			{
				visit[xpour][ypour] = 1;
				BFS();
				if(fillS) System.out.print(visit[xSpecial][ySpecial] + " ");
				else System.out.print(-1 + " ");
				if(!checkFullMelted()) System.out.println(-1);
				else System.out.println(time);
				
			}
		}
	}
}
#################################################################

package day19_2306;

import java.util.Scanner;

public class hugo_mat_ong {
	
	static int row, col;
	static long ans;
	static int[][] map;
	static int[][] dl = {{-1, 0, 1, 1, 1, 0}, {0, 1, 1, 0, -1, -1}};
	static int[][] dc = {{-1, -1, 0, 1, 0, -1}, {0, 1, 1, 0, -1, -1}};
	static boolean[][] visit;
	
	private static void DFS(int x, int y, int sum, int cnt){
//		visit[x][y] = true;
		if(cnt == 4){
			ans = sum > ans ? sum : ans;
			return;
		}
			
		int dx, dy;
		for(int i = 0; i < 6; i++){
			if(y % 2 == 0){
				dx = x + dc[0][i]; dy = y + dc[1][i];
			}
			else{
				dx = x + dl[0][i]; dy = y + dl[1][i];
			}
			
			if(dx >= 0 && dy >= 0 && dx < row && dy < col && !visit[dx][dy]){
				visit[dx][dy] = true;
				DFS(dx, dy, sum + map[dx][dy], cnt + 1);
				visit[dx][dy] = false;
			}
		}
	}
	
	public static void DFS2(int x, int y){
		int suml = map[x][y], sumc = map[x][y], cntl = 1, cntc = 1;
		int dx, dy;
		for(int i = 0; i < 6; i++){
			if(i % 2 == 0){
				dx = x + dc[0][i]; dy = y + dc[1][i];
				if(dx >= 0 && dy >= 0 && dx < row && dy < col){
					cntc++;
					sumc += map[dx][dy];
				}
			}
			else{
				dx = x + dl[0][i]; dy = y + dl[1][i];
				if(dx >= 0 && dy >= 0 && dx < row && dy < col){
					cntl++;
					suml += map[dx][dy];
				}
			}
		}
		
		if(cntc == 4) ans = sumc > ans ? sumc : ans;
		if(cntl == 4) ans = suml > ans ? suml : ans;
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Scanner sc = new Scanner(System.in);
		int testcase = sc.nextInt();
		for(int tc = 1; tc <= testcase; tc++){
			col = sc.nextInt(); row = sc.nextInt();

			
			map = new int[row][col];
			for(int i = 0; i < row; i++){
				for(int j = 0; j < col; j++){
					map[i][j] = sc.nextInt();
				}
			}

			visit = new boolean[row][col];
			ans = 0;
			for(int i = 0; i < row; i++){
				for(int j = 0; j < col; j++){
					visit[i][j] = true;
					DFS(i, j, map[i][j], 1);
					visit[i][j] = false;
					DFS2(i, j);
				}
			}
			
			ans = ans * ans;
			System.out.println("Case #" + tc);
			System.out.println(ans);
		}
//		System.out.println("Case #1");
//		System.out.println(2250000);
	}

}

############################################################################################
package day19_2306;

import java.util.Scanner;

public class hugo_pha_dien {
	static int n, cnt, island;
	static boolean[] visit;
	static int[][] map;
	
	private static void reset(){
		for(int i = 0; i < n; i++){
			visit[i] = false;
		}
	}
	
	private static void backTrack(int idx){
		for(int i = 0; i < n; i++){
			if(map[idx][i] == 1 && !visit[i]){
				visit[i] = true;
				backTrack(i);
			}
		}
	}
	
	private static int solve(int iln){
		int cnt = 0;
		for(int i = 0; i < n; i++){
			if(!visit[i]){
				cnt++;
				visit[i] = true;
				backTrack(i);
			}
		}
		return cnt;
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Scanner sc = new Scanner(System.in);
		int testcase = sc.nextInt();
		for(int tc = 1; tc <= testcase; tc++){
			n = sc.nextInt();
			map = new int[n][n];
			visit = new boolean[n];
			for(int i = 0; i < n; i++){
				for(int j = 0; j < n; j++){
					map[i][j] = sc.nextInt();
				}
			}
			island = -1;
			cnt = 1;
			
			for(int i = 0; i < n; i++){
				reset();
				visit[i] = true;
				
				int tmp = solve(i);
				if(tmp > cnt){
					island = i;
					cnt = tmp;
				}
				
			}
			System.out.println(island + 1);
			
		}
	}

}















Editor is loading...