알고리즘 과 데이터 구조 9.2
n 개의 삼각형 을 드 리 겠 습 니 다. 삼각형 마다 우아 한 값 이 있 습 니 다. 그리고 삼각형 을 물 어 볼 때마다 물 어 보 는 삼각형 과 비슷 한 삼각형 의 우아 한 값 이 가장 큰 지 물 어보 세 요.
★ 데이터 입력
첫 번 째 줄 의 입력 은 n 개의 숫자 를 포함 하고 그 다음 n 줄, 각 줄 의 네 개의 정수 숫자 a, b, c, val 은 세 개의 변 을 표시 하 며 아름 다운 값 을 입력 한 후에 하나의 숫자 m 다음 m 줄 을 입력 하고 각 줄 의 세 개의 숫자 a, b, c 는 문의 삼각형 을 표시 합 니 다.
★ 데이터 출력
m 줄 을 출력 합 니 다. 검색 한 삼각형 이 주어진 n 개 에 없 으 면 "Sorry" 를 출력 합 니 다. 그렇지 않 으 면 삼각형 의 아름 다운 값 을 출력 합 니 다.
예제 입력
출력 예시
3 3 5 4 10 6 8 10 20 2 3 4 5 3 3 4 5 4 5 6 2 3 4
20 Sorry 5
★ 힌트
제 시 된 세 변 은 무질서 하고 삼각형 을 구성 할 수 있 음 을 보증 합 니 다.
40% 의 데 이 터 는 비슷 한 조건 을 고려 할 필요 가 없다.
70% 의 데이터 1 < = n, m < = 1, 000 1 < = a, b, c < = 1, 000
100% 데이터 1 < = n < = 200, 000 1 < = m < = 500, 000 a, b, c (1 < = a, b, c < = 100, 000) val 은 int 범위 내 에 있 습 니 다.
★ 사고방식
double f = (1.0*a / b + 1.0*a / c);
__int64 i64 = f * 1000000000;
return i64 % MAXN;
#include
#include
typedef struct trangle
{
double scale1, scale2;
int data;
struct trangle *next;
}tran;
tran *hash_[100005];
void in_hash(int str[], int _data)
{
int i;
double t;
t = (str[1] * 1.0) / (str[2] * 1.0) + (str[0] * 1.0) / (str[1] * 1.0);
//t = 1.0*str[1]*str[0]/str[2]/str[2];
__int64 i64 = t * 1000000000;
int temp = i64 % 100001;
tran *p = (tran*)malloc(sizeof(tran));
int w = 0;
tran *q = hash_[temp];
while (q)
{
if ((str[1] * 1.0) / (str[0] * 1.0) == q->scale1 && (str[2] * 1.0) / (str[1] * 1.0) == q->scale2)
{
if (_data > q->data)
q->data = _data;
w = 1;
break;
}
q = q->next;
}
if (w == 0)
{
p->data = _data;
p->scale1 = (str[1] * 1.0) / (str[0] * 1.0);
p->scale2 = (str[2] * 1.0) / (str[1] * 1.0);
p->next = hash_[temp];
hash_[temp] = p;
}
}
void tranglesort(int str[])
{
int i, j, t;
for (i = 0; i < 2; i++)
{
for (j = i + 1; j < 3; j++)
{
if (str[i] > str[j])
{
t = str[i];
str[i] = str[j];
str[j] = t;
}
}
}
}
void search_hash_(int str[])
{
int i;
double temp;
temp = (str[1] * 1.0) / (str[2] * 1.0) + (str[0] * 1.0) / (str[1] * 1.0);
__int64 i64 = temp * 1000000000;
int ans = i64 % 100001;
tran *p = hash_[ans];
while (p)
{
if ((str[1] * 1.0) / (str[0] * 1.0) == p->scale1 && (str[2] * 1.0) / (str[1] * 1.0) == p->scale2)
{
printf("%d", p->data);
return;
}
else
p = p->next;
}
printf("Sorry");
}
int main()
{
int dat[3] = { 0 }, i, j, n, m, grace;
scanf("%d", &n);
for (i = 0; i < n; i++)
{
for (j = 0; j < 3; j++)
scanf("%d", &dat[j]);
scanf("%d", &grace);
tranglesort(dat);
in_hash(dat, grace);
}
scanf("%d", &m);
for (i = 0; i < m; i++)
{
for (j = 0; j < 3; j++)
scanf("%d", &dat[j]);
tranglesort(dat);
search_hash_(dat);
if (i != m)
printf("
");
}
return 0;
}
다음으로 전송:https://www.cnblogs.com/031602523liu/p/7901078.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.