Untitled

 avatar
unknown
plain_text
2 years ago
14 kB
4
Indexable
###################################################
pizza v1

package practise;

import java.util.Scanner;

public class pizza_location {
	
	static int rest, r2, idxr, idxp;
	static int x = 0, y = 1, p = 2, ans;
	static int[][] location, person, map;
	static int[] choose;
	
	private static void chooseRest(int a) {
		
		if(a > rest) {
			solve();
			return;
		}
		
		for(int i = choose[a - 1] + 1; i < idxr; i++) {
			choose[a] = i;
			chooseRest(a + 1);
		}
	}
	
	private static void solve() {
		int tmp = 0;
		for(int i = 0; i < idxp; i++) {
			for(int j = 1; j <= rest; j++) {
				if(map[choose[j]][i] != 0) {
					tmp += map[choose[j]][i];
					break;
				}
			}
		}
		
		if(ans < tmp) ans = tmp;
	}
	
	private static boolean calR(int ir, int ip) {
		int dx = location[x][ir] - person[x][ip];
		int dy = location[y][ir] - person[y][ip];
		int d = dx * dx + dy * dy;
		if(d <= r2) return true;
		else return false;
	}
	private static void fillMap() {
		for(int i = 0; i < idxr; i++) {
			for(int j = 0; j < idxp; j++) {
				if(calR(i, j)) {
					map[i][j] = person[p][j];
				}
			}
		}
	}

	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++) {
			rest = sc.nextInt(); 
			int r = sc.nextInt();; r2 = r * r;
			idxr = sc.nextInt();
			
			location = new int[2][idxr];
			for(int i = 0; i < idxr; i++) {
				location[x][i] = sc.nextInt();
				location[y][i] = sc.nextInt();
			}
			
			idxp = sc.nextInt();
			person = new int[3][idxp];
			for(int i = 0; i < idxp; i++) {
				person[x][i] = sc.nextInt();
				person[y][i] = sc.nextInt();
				person[p][i] = sc.nextInt();
			}
			
			map = new int[idxr][idxp];
			fillMap();
			ans = 0;
			choose = new int[rest + 1];
			choose[0] = -1;
			
			chooseRest(1);
			
			System.out.println("#" + tc + " " + ans);
		}
	}

}

###################################################
pizza v2

package practise;

import java.util.Scanner;

public class pizza_locationv2 {

	static int rest, r2, idxr, idxp;
	static int x = 0, y = 1, p = 2, ans;
	static int[][] location, person;
	static boolean[][] map;
	static int[] choose;
	static boolean[] visit;
	
	
	private static boolean calR(int ir, int ip) {
		int dx = location[x][ir] - person[x][ip];
		int dy = location[y][ir] - person[y][ip];
		int d = dx * dx + dy * dy;
		if(d <= r2) return true;
		else return false;
	}
	private static void fillMap() {
		for(int i = 0; i < idxr; i++) {
			for(int j = 0; j < idxp; j++) {
				if(calR(i, j)) {
					map[i][j] = true;
				}
			}
		}
	}
	
	private static void solve(int loop) {
		if(loop > idxr) return;
		int sum = 0;
		for(int i = 0; i < idxr; i++) {
			sum += choose[i];
		}
		if(sum == rest) {
			int cnt = 0;
			for(int i = 0; i < idxp; i++) {
				visit[i] = false;
			}
			
			for(int i = 0; i < idxr; i++) {
				for(int j = 0; j < idxp; j++) {
					if(choose[i] == 1 && visit[j] == false && map[i][j] == true) {
						cnt += person[p][j];
						visit[j] = true;
					}
				}
			}
			
			if(ans < cnt) ans = cnt;
			return;
			
		}
		
		for(int i = 1; i >= 0; i--) {
			choose[loop] = i;
			solve(loop + 1);
		}
		
	}
	

	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++) {
			rest = sc.nextInt(); 
			int r = sc.nextInt();; r2 = r * r;
			idxr = sc.nextInt();
			
			location = new int[2][idxr];
			for(int i = 0; i < idxr; i++) {
				location[x][i] = sc.nextInt();
				location[y][i] = sc.nextInt();
			}
			
			idxp = sc.nextInt();
			person = new int[3][idxp];
			for(int i = 0; i < idxp; i++) {
				person[x][i] = sc.nextInt();
				person[y][i] = sc.nextInt();
				person[p][i] = sc.nextInt();
			}
			
			map = new boolean[idxr][idxp];
			fillMap();
			choose = new int[idxr + 1];
			visit = new boolean[idxp];
			ans = 0;
			solve(0);
			

			System.out.println("#" + tc + " " + ans);
		}
	}

}


############################################
pizza c++

#include <iostream>
using namespace std;

int k, r;						// 1 <= k <= 10, 1 <= r <= 500
int m;							// k <= m <= 20
int A[20][2]; 
int n;							// 1 <= n <= 100
int B[100][3];

bool C[20][100];
int D[20];
bool Vis[100];
int res;

void inputF () {
	cin >> k >> r;
	cin >> m;
	for (int i = 0; i < m; i++) {
		cin >> A[i][0] >> A[i][1];
	}
	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> B[i][0] >> B[i][1] >> B[i][2];
	}
}

void resetF () {
	for (int i = 0; i < m; i++) {
		for (int j = 0; j < n; j++) {
			C[i][j] = false;
		}
	}
	for (int i = 0; i < m; i++) {
		D[i] = 0;
	}
	res = 0;
}

void markF () {
	for (int i = 0; i < m; i++) {
		for (int j = 0; j < n; j++) {
			if (( (A[i][0] - B[j][0])*(A[i][0] - B[j][0]) + (A[i][1] - B[j][1])*(A[i][1] - B[j][1]) ) <= r*r) {
				C[i][j] = true;
			}
		}
	}
}

void pizzaF (int loop) {
	if (loop > m) {
		return;
	}

	int sum = 0;
	for (int i = 0; i < m; i++) {
		sum += D[i];
	}
	if (sum == k) {
		int cnt = 0;
		for (int i = 0; i < n; i++) {
			Vis[i] = false;
		}
		for (int i = 0; i < m; i++) {
			for (int j = 0; j < n; j++) {
				if (D[i] == 1 && Vis[j] == false && C[i][j] == true) {
					cnt += B[j][2];
					Vis[j] = true;
				}
			}
		}
		if (res < cnt) {
			res = cnt;
		}
		return;
	}

	for (int i = 1; i >= 0; i--) {
		D[loop] = i;
		pizzaF(loop+1);
	}
}

int main () {
	int TestCase;
	cin >> TestCase;
	for (int tc = 1; tc <= TestCase; tc++) {
		inputF();
		resetF();
		markF();
		pizzaF(0);
		cout << "#" << tc << " " << res << endl;
	}
	return 0;
}


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

frog v2
package practise;

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 x) {
		rear = (rear + 1) % max;
		q[rear] = x;
		++cnt;
	}
	
	
	public int dequeue()
	{
		int tmp = q[front];
		front = (front + 1) % max;
		--cnt;
		return tmp;
	}
}

public class the_frogv2 {
	
	static int n;
	static int x = 0, y = 1, r = 2, near = 40 * 40, far = 90 * 90, INF = 100000;
	static int[] visit;
	static int[][] map;
	
	public static int calculate(int i1, int i2) {
		int l1 = (map[x][i1] - map[x][i2]) * (map[x][i1] - map[x][i2]);
		int l2 = (map[y][i1] - map[y][i2]) * (map[y][i1] - map[y][i2]);
		int l3 = map[r][i1] * map[r][i1] + map[r][i2] * map[r][i2];
		
		int len = l1 + l2 - l3;
		if(len < near) {
			return 1;
		}
		else {
			if(len < far) {
				return 200;
			}
			else return INF;
		}
	}
	
	private static void BFS() {
		MyQueue q = new MyQueue(n * n);
		q.enqueue(0);
		visit[0] = 0;
		while(!q.isEmpty()) {
			 int x = q.dequeue();
			 for(int i = 0; i < n; i++) {
				 if(x != i) {
					 int tmp = calculate(x, i);
					 if(tmp + visit[x] < visit[i]) {
						 visit[i] = tmp + visit[x];
						 q.enqueue(i);
					 }
				 }
			 }
		}
	}
	private static void reset() {
		for(int i = 0; i < n; i++) {
			visit[i] = INF;
		}
	}

	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();
			visit = new int[n];
			map = new int[3][n];
			for(int i = 0; i < n; i++) {
				map[x][i] = sc.nextInt();
				map[y][i] = sc.nextInt();
				map[r][i] = sc.nextInt();
			}
			
			reset();
			BFS();
			
			int val = visit[n - 1];
			if(val == INF) {
				System.out.println(-1);
			}
			else {
				System.out.println(val/200 + " " + val%200);
			}
			
		}
	}

}



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

frog v3 (backtrack)
package practise;

import java.util.Scanner;

public class the_frogv3 {
	
	static int n, ansf, ansn;
	static boolean flag;
	static int x = 0, y = 1, r = 2, near = 40 * 40, far = 90 * 90, INF = 100000;
	static boolean[] visit;
	static int[][] map;
	
	public static int calculate(int i1, int i2) {
		int l1 = (map[x][i1] - map[x][i2]) * (map[x][i1] - map[x][i2]);
		int l2 = (map[y][i1] - map[y][i2]) * (map[y][i1] - map[y][i2]);
		int l3 = map[r][i1] * map[r][i1] + map[r][i2] * map[r][i2];
		
		int len = l1 + l2 - l3;
		if(len < near) {
			return 1;
		}
		else {
			if(len < far) {
				return 2;
			}
			else return INF;
		}
	}
	
	private static void solve(int leaf, int cntf, int cntn) {
		if(leaf == n - 1) {
			if(ansf > cntf) {
				ansf = cntf;
				ansn = cntn;
			}
			else if(ansf == cntf && ansn > cntn) {
				ansn = cntn;
			}
			flag = true;
			return;
		}
		
		for(int i = 1; i < n; i++) {
			if(i != leaf && !visit[i]) {
				int tmp = calculate(leaf, i);
				if(tmp == 1) {
					visit[i] = true;
					solve(i, cntf, cntn + 1);
					visit[i] = false;
				}
				else if(tmp == 2) {
					visit[i] = true;
					solve(i, cntf + 1, cntn);
					visit[i] = false;
				}
//				else return;
			}
		}
		
	}
	
	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();
			visit = new boolean[n];
			map = new int[3][n];
			for(int i = 0; i < n; i++) {
				map[x][i] = sc.nextInt();
				map[y][i] = sc.nextInt();
				map[r][i] = sc.nextInt();
			}
			
			ansn = INF; ansf = INF;
			flag = false;
			visit[0] = true;
			solve(0, 0, 0);
			if(!flag) {
				System.out.println(-1);
			}
			else {
				System.out.println(ansf + " " + ansn);
			}
			
		}
	}
}






############################################
cleaning robot

package practise;

import java.util.Scanner;


class Queue{
	private int front, rear, max, cnt;
	private int[] q;
	
	public Queue(int a) {
		// TODO Auto-generated constructor stub
		front = 0;
		rear = -1;
		max = a;
		cnt = 0;
		q = new int[a];
	}
	
	public boolean isEmpty() {
		return cnt == max;
	}
	
	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 cleaning_robot {
	
	static int row, col, dirt, step, xr, yr;
	static int[][] map;
	static boolean[][] visit;

	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();
			map = new int[row][col];
			visit = new boolean[row][col];
			dirt = 0; xr = 0; yr = 0;
			for(int i = 0; i < row; i++) {
				for(int j = 0; j < col; j++) {
					map[i][j] = sc.nextInt();
					if(map[i][j] == 1) {
						dirt++;
					}
					else if(map[i][j] == 3) {
						xr = i; yr = j;
					}
				}
			}
			
			
			
			
			
			
			
		}
	}

}



######################################################
cleaning robot c++

#include <iostream>
using namespace std;

int N, M;
int a[105][105];
int visited[105][105]; 
int cnt[105][105];
int dx[] = {-1, 0, 1,  0};
int dy[] = { 0, 1, 0, -1};
int qx[100000];
int qy[100000];
int front;
int rear;
int done[105][105];
int cntDirty;

// Queue
bool isEmpty(){
	return front == -1;
}

void push(int x, int y){
	if(front == -1) front = 0;
	rear++;
	qx[rear] = x;
	qy[rear] = y;
}

void pop(){
	if(front >= rear) front = rear = -1;
	else front++;
}

// BFS
int XDirty, YDirty;
int total;
int BFS(int x, int y){
	front = rear = -1;
	for(int i = 0; i < N; i++){
		for(int j = 0; j < M; j++){
			visited[i][j] = 0;
			cnt[i][j] = 0;
		}
	}

	visited[x][y] = 1;
	push(x,y);

	int step = 1000000;
	while(!isEmpty()){
		int topx = qx[front];
		int topy = qy[front];
		pop();

		for(int i = 0; i < 4; i++){
			int x1 = topx + dx[i];
			int y1 = topy + dy[i];

			if(x1 >= 0 && x1 < N && y1 >= 0 && y1 < M && a[x1][y1] >= 0 && a[x1][y1] < 2 && visited[x1][y1] == 0){
				cnt[x1][y1] = cnt[topx][topy] + 1;
				visited[x1][y1] = 1;
				push(x1,y1);

				if(a[x1][y1] == 1 && done[x1][y1] == 0) {
					if(cnt[x1][y1] < step){
						 step = cnt[x1][y1];
						 XDirty = x1;
						 YDirty = y1;
						 done[x1][y1] = 1;
					}
				}
				
			}
		}
	}
	
	return step;
}

void in(){
		for(int i = 0; i < N; i++){
			for(int j = 0; j < M; j++){
				cout << done[i][j];
			}
			cout << endl;
		}
}     

int main(){
	
	int T; cin >> T;

	for(int tc = 1; tc <= T; tc++){
		cin >> N >> M;

		for(int i = 0; i < N; i++){
			for(int j = 0; j < M; j++){
				done[i][j] = 0;
			}
		}

		cntDirty = 0; total = 0;
		for(int i = 0; i < N; i++){
			for(int j = 0; j < M; j++){
				cin >> a[i][j];
				if(a[i][j] == 1) cntDirty++;
				if(a[i][j] == 3){
					XDirty = i;
					YDirty = j;
				}
			}
		}

		done[XDirty][YDirty] = 3;
		for(int i = 0; i < cntDirty; i++){
			a[XDirty][YDirty] = 0;
			total += BFS(XDirty, YDirty);
		}
		
		cout << "Case #" << tc << endl;
		if(total >= 1000000){
			cout << -1 << endl;
		}else{
			cout << total << endl;
		}
	}

	return 0;
}






Editor is loading...