ajeloy catman Ответов: 1

Как я выбираю места для уменьшения в переменной int? (В методе calculateminimuncameras


Привет, это снова я, думаю, что теперь я усвоил урок.
Мне нужен подход к этой проблеме на java.
Мы охранная компания и должны следить за зданием. Здание имеет форму правильного многоугольника, и в зависимости от количества камер, которые у нас есть, и поведения этих камер эта программа должна вычесть минимальное количество камер, чтобы покрыть все стены многоугольника.
Каждая из камер содержит два целых числа ai и bi, которые определяют количество стен, которые покрывают.
-если AI &ЛТ; Би то камера охватывает поскольку стена компа до стены би, который (Ай &ЛТ;= Дж &л;= би), то J = стенках крышки.
-если AI &ГТ; Би то камера охватывает поскольку стена компа до стены Н или крышки после падения Берлинской стены, 1 до стены би; это (Ма &ЛТ;= Дж &Л;= П), или (1 &ЛТ;= Дж &л;=би); к = стенках крышки.

Входные параметры таковы:
-n: количество стенок, и (3 <= n<= 10^6).
-k: количество камер, и (1 <= k <= 10^6)
- ai, bi для каждой камеры и (1 <= ai && bi <= n)

Процесс:
.
.
.


Выходные параметры таковы:
-минимальное количество камер.

Пример 1:
вход:
8 2
8 4
5 8

выход:
2

Пример 2:
вход:
100 7
1 50
50 70
70 100
90 40
20 60
60 80
80 20

выход:
3

В коде, который я только что создал для своей задачи, мой вопрос звучит так : ¿как мне выбрать места для уменьшения целых чисел в атрибутивных стенах... когда параметры равны (ai < bi).

Что я уже пробовал:

import java.util.Scanner;
import java.util.ArrayList;
public class Integer {

	private ArrayList <int[]> integers = new ArrayList <int[]>(); 
	private int walls;
	private int cameras;
	
	public int numberWalls() {
		Scanner read = new Scanner (System.in);
		System.out.println("¿How many walls do you want in the building?");
		this.walls = read.nextInt();
		return this.walls;
	}
	
	public int numberCameras() {
		Scanner read = new Scanner (System.in);
		System.out.println("¿How many cameras do you want monitoring the building?");
		this.cameras = read.nextInt();
		return this.cameras;
	}
	
	public void generateIntegers (int cameras) {
		Scanner read = new Scanner (System.in);
		for (int i = 0; i < cameras; i++) {
			int j = i+1;
			System.out.println ("Introduces the pair "+j);
			System.out.println("First introduces the 'ai' parameter");
			int ai = read.nextInt();
			System.out.println("Second introduces the 'bi' parameter");
			int bi = read.nextInt();
			int[] pair = {ai, bi};
			this.integers.add(i,pair);
		}
	}
	
	public int getCameras () {
		return this.cameras;
	}
	
	public int getWalls () {
		return this.walls;
	}
	
	public ArrayList <int []> getPairs (){
		return this.integers;
	}
	
	public void CalculateMinimunCameras(int walls, ArrayList <int[]> pairs, int cameras) {
		for (int i = 0; i < cameras ; i++) {
			int [] pair = pairs.get(i);	
       // here is my dude, I need to remove a part of the number of walls but I need to selects this part too		
			if (pair[0] < pair[1]) {
				walls = walls -(pair[1]-pair[2]);
			}
		}
	}
	}

1 Ответов

Рейтинг:
1

John Michael Richard

если вычесть стены арифметически, вы только уменьшите количество стен в однонаправленном направлении, и вам нужно удалить количество стен по частям. В этом случае с ai < bi решение можно изолировать и сложить вместе значения (bi - ai), и тогда только если параметры ai и bi повторяются и они пересекаются, можно сказать, что если сумма значений (bi-ai) > стенки, то вы убрали все стенки.