Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.10.2011, 11:43   #1
danzel1
Пользователь
 
Регистрация: 15.03.2011
Сообщений: 61
По умолчанию олимпиадная задача

условие:из листа клетчатой бумаги N*N клеток вырезали М клеток . на сколько кусков распадается оставшаяся часть листа?

Первая строка входного файла содержит два натуральных числа N и M(N<=101 , M<= N*N <= 101)
далее идут М строк в каждой из которых координаты вырезаных клеток -номер строки х и номер столбца у.


он почемуто не работает:

Код:
#include<iostream>
#include<string>
using namespace std;
int chislo=0;
int main(){
	int pole[102][102];
	int n,m;
	cin >> n >> m;
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			pole[i][j]=0;
		}
	}

	for(int i=0;i<m;i++){
		int x,y;
		cin >> x >> y;
		pole[x+1][y+1]=666;
	}
	for(int i=n+1;i<102;i++){
		for(int j=n+1;j<102;j++){
			pole[i][j]=666;
		}
	}
	for(int i=1;i<n+1;i++){
		for(int j=1;j<n+1;j++){
			//if(pole[i][j]==0){
			//	pole[i][j]=chislo;
			//	pole[i][j+1]= pole[i][j+1]==0 ? chislo : pole[i][j+1];
			//	pole[i][j-1]= pole[i][j-1]==0 ? chislo : pole[i][j-1];
			//	pole[i+1][j]= pole[i+1][j]==0 ? chislo : pole[i+1][j];
			//	pole[i-1][j]= pole[i-1][j]==0 ? chislo : pole[i-1][j];
			//	if(pole[i][j+1]!=0 && pole[i][j-1]!=0 && pole[i+1][j]!=0 && pole[i-1][j]!=0)chislo++;
			//}
			if(pole[i][j]==chislo){
				if(pole[i][j+1])pole[i][j+1]=chislo;
				if(pole[i][j-1])pole[i][j-1]=chislo;
				if(pole[i+1][j])pole[i+1][j]=chislo;
				if(pole[i-1][j])pole[i-1][j]=chislo;
				if(pole[i][j+1]!=0 && pole[i][j-1]!=0 && pole[i+1][j]!=0 && pole[i-1][j]!=0)chislo++;
			}
		}
	}
	cout << chislo;
	return 0;
}
danzel1 вне форума Ответить с цитированием
Старый 20.10.2011, 14:23   #2
VadEr
Форумчанин
 
Аватар для VadEr
 
Регистрация: 24.03.2009
Сообщений: 375
По умолчанию

Смотря, что подразумевать под этим загадочным термином: "кусков".
Если 1 кусок = 1 ячейки, то: кусков останется N*N - M (это максимум на которое можно разложить, т.к. кусков не сделаешь больше, самого кол-ва ячеек).
Если 1 кусок может содержать несколько ячеек, то кусков может быть от 1 до N*N - M.
Ну и наконец, если саму ячейку можно делить на куски(т.к. в условии говорится только о делении листа, а не ячеек), то получается, кол-во кусков = (площадь ячейки)*(N*N - M) / (условная площадь куска), т.е. кол-во кусков прямо пропорциональна площади ячейки и обратно пропорциональна площади куска

Последний раз редактировалось VadEr; 20.10.2011 в 14:34.
VadEr вне форума Ответить с цитированием
Старый 21.10.2011, 15:15   #3
danzel1
Пользователь
 
Регистрация: 15.03.2011
Сообщений: 61
По умолчанию

вы бесчеловечно изнасиловали мой моск!!!
нужно было ввести размер матрицы(N, она затем умножалась и получалось N*N)
и число M(число вырезаемых клеток).
затем вводились координаты(х и у) вырезаемых клеток их число равнялось М.
надо было вывести чило кусков оставшихся от разрезаного первичного куска. например:
4 4
2 1
2 2
2 3
2 4
вывод:
2
danzel1 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Олимпиадная задача №11 Зайчик NiceEnd Паскаль, Turbo Pascal, PascalABC.NET 1 16.10.2011 02:14
Новая олимпиадная задача) Alexey_kor Помощь студентам 10 30.01.2011 23:57
Олимпиадная задача Alexey_kor Помощь студентам 7 30.01.2011 02:22
Олимпиадная задача. _-Re@l-_ Паскаль, Turbo Pascal, PascalABC.NET 1 09.12.2010 20:53
Олимпиадная задача Carbon Общие вопросы C/C++ 2 23.05.2007 22:07