연습문제 4-2 정사각형 UVa201
2120 단어 uva
2. 문제풀이 사고방식: 입력한 각 점을 직사각형 왼쪽 상단으로 하고 시계 방향을 따라 한 바퀴 돌며 한 변의 길이가len인 정사각형으로 둘러싸일 수 있는지 확인한다.
3. 코드:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<math.h>
#include<stdlib.h>
#define max 200
int n, m;
int arr[max][3];
int find(int len, int a, int x, int y)
{
if (a == 'V') return 0;
int aa = 1, bb = 1, cc = 1, dd = 1;
int k;
for (int i = y; i < y + len; i++)
{
for (k = 0; k < m; k++)
if (arr[k][0] == 'H'&&arr[k][1] == x&&arr[k][2] == i)
break;
if (k == m) aa = 0;
}
for (int i = y; i < y + len; i++)
{
for (k = 0; k < m; k++)
if (arr[k][0] == 'H'&&arr[k][1] == x + len&&arr[k][2] == i)
break;
if (k == m) bb = 0;
}
for (int i = x; i < x + len; i++)
{
for (k = 0; k < m; k++)
if (arr[k][0] == 'V'&&arr[k][2] == i&&arr[k][1] == y)
break;
if (k == m) cc = 0;
}
for (int i = x; i < x + len; i++)
{
for (k = 0; k < m; k++)
if (arr[k][0] == 'V'&&arr[k][2] == i&&arr[k][1] == y + len)
break;
if (k == m)dd = 0;
}
if (aa&&bb&&cc&&dd) return 1;
return 0;
}
int main()
{
//freopen("input.txt", "r", stdin);
//freopen("output.txt", "w", stdout);
int rnd = 0;
while (scanf("%d%d", &n, &m) == 2)
{
for (int i = 0; i < m; i++)
scanf("%s%d%d", &arr[i][0], &arr[i][1], &arr[i][2]);
if (rnd)
printf("
**********************************
");
printf("Problem #%d
", ++rnd);
int flag = 0;
for (int i = 1; i < n; i++)
{
int count = 0;
for (int j = 0; j < m; j++)
{
if (find(i, arr[j][0], arr[j][1], arr[j][2]))
{
flag = 1;
count++;
}
}
if (count)
printf("%d square (s) of size %d
", count, i);
}
if (!flag)
printf("No completed squares can be found.
");
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
UVA - 10986 Sending email(Dijkstra 인접 테이블 + 우선 순위 대기열 최적화)제목 대의: s점에서 t점까지의 최소 거리를 구하는 그림을 주세요. 확인: 적나라한 최단길이지만 n이 너무 크면 인접 행렬을 사용할 수 없기 때문에 Dijkstra에 대한 인접표 + 우선 대기열 최적화가 필요합니다....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.