Untitled
unknown
plain_text
3 years ago
14 kB
6
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...