#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
struct Algo {
char name[100];
int d;
int idx; // 사전순 정렬 했을 때 순서
};
struct mem {
char name[100];
int t;
int algo1;
int algo2; //index
};
int n, m, Q, al1_idx, al2_idx, standard;
Algo A[250];
mem s[20];
bool cmp(Algo A, Algo B) {
if(abs(A.d-standard) != abs(B.d-standard)) return abs(A.d-standard) < abs(B.d-standard);
return strcmp(A.name, B.name)< 0;
}
bool CMP(Algo A, Algo B) { //사전 순
if(A.d != B.d) return A.d < B.d;
return strcmp(A.name, B.name)< 0;
}
int abs(int a) { return a>0 ? a:-a; }
int main() {
//입력부
scanf("%d", &n);
for(int i=0; i<n; i++) {
scanf("%s %d", A[i].name, &A[i].d);
}
scanf("%d", &m);
for(int i=0; i<m; i++) {
scanf("%s %d", s[i].name, &s[i].t);
}
//알고리즘 사전순 정렬, 인덱싱
sort(A, A+n, CMP);
for(int i=0; i<n; i++) A[i].idx=i;
//algo1, algo2 설정_매번 정렬?
for(int i=0; i<m; i++) {
standard = s[i].t;
sort(A, A+n, cmp);
s[i].algo1=A[0].idx;
s[i].algo2=A[1].idx;
}
//사전순 정렬
sort(A, A+n, CMP);
//출력부
scanf("%d", &Q);
int mem_idx;
for(int i=0; i<Q; i++) {
char nAME[100]={}, tmp[200];
scanf(" %[^\n]s", tmp);
if(tmp[strlen(tmp)-1]=='!') {
printf("hai!\n");
for(int j=0; tmp[j]!=' '; j++)
nAME[j]=tmp[j];
for(int j=0; j<m; j++) {
if(strcmp(nAME, s[j].name)==0) {
mem_idx=j;
break;
}
}
}
else {
printf("%s yori mo %s\n", A[s[mem_idx].algo2].name, A[s[mem_idx].algo1].name);
}
}
}
/*
셀프 예제
9
ad_hoc 2
tppppp 6
case_work_ad_hoc 4
hash_map 6
sorting 6
segtree 15
stable_marriage 20
kinetic_segtree 28
anata 17
5
bronze 4
silver 7
platinum 16
ruby 26
nani 24
10
ruby - chan!
nani ga suki?
platinum - chan!
nani ga suki?
silver - chan!
nani ga suki?
bronze - chan!
nani ga suki?
nani - chan!
nani ga suki?
*/
To embed this project on your website, copy the following code and paste it into your website's HTML: