#include <stdio.h>
#include <stdlib.h>
typedef struct {
int x, y;
} point; //좌표를 point로 표시한다. 굳이 할 필요는 없다
// 두 점 사이 거리의 제곱을 계산
int dis(point a, point b) {
int dx = a.x - b.x;
int dy = a.y - b.y;
return dx * dx + dy * dy;
}
// 정수 오름차순 비교 함수
int compare(const void *a, const void *b) {
return (*(int *)a - *(int *)b);
}
// 정사각형인지 판단
int square(point p[4]) {
int d[6];
int index = 0;
// 6개의 거리(변 4개, 대각선 2개)의 제곱을 구한다.
for (int i = 0; i < 4; i++) {
for (int j = i + 1; j < 4; j++) {
d[index++] = dis(p[i], p[j]);
}
}
// 거리 정렬한다. 변 4개가 앞으로 오고 대각선 2개가 뒤로 온다. 아래의 return문을 위해서 필요하다.
qsort(d, 6, sizeof(int), compare);
if (d[0] == 0) return 0;
// 정사각형 조건: 변 4개 같으며 대각선 2개가 서로 같다. 변 < 대각선
return (d[0] == d[1] &&
d[1] == d[2] &&
d[2] == d[3] &&
d[4] == d[5] &&
d[0] < d[4]);
}
int main() {
int T;
scanf("%d", &T);
while (T--) {
point p[4];
for (int i = 0; i < 4; i++) {
scanf("%d %d", &p[i].x, &p[i].y);
}
printf("%d\n", square(p));
}
return 0;
}
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_INPUT 3001
#define MAX_SEQ 1000000
char input[MAX_INPUT];
char seq[MAX_SEQ];
//부분 수열을 비교하는 부분이다
//같은 수가 몇 번 나왔는지의 방식으로 부분수열을 검사한다
int fun(char *input, char *seq) {
int i = 0, j = 0;
int len_input = strlen(input);
int len_seq = strlen(seq);
while (i < len_input && j < len_seq) {
if (input[i] == seq[j]) {
i++;
}
j++;
}
return i == len_input;
}
int main() {
scanf("%s", input);
seq[0] = '\0';
int N = 1;
//숫자 1부터 비교를 시작할거기 때문에 시작하는 값을 1로 해준다
while (1) {
char temp[12];
sprintf(temp, "%d", N);
strcat(seq, temp);
if (fun(input, seq)) {
printf("%d\n", N);
break;
}
N++;
//만족하는 숫자(마지막 숙자)가 나올 때 까지 N의 값을 1씩 증가시킨다
}
return 0;
}