#include #include typedef struct { int A, B; } Frac; int comp(const void *a, const void *b) { // ポインタ(Frac*)aが指す構造体のフィールドBを読み書きできる・・・ return ((Frac*)a)->B * ((Frac*)b)->A - ((Frac*)a)->A * ((Frac*)b)->B; } int main(void) { int n, i; Frac frac[10]; scanf("%d", &n); for (i = 0; i < n; ++i) scanf("%d%d", &frac[i].A, &frac[i].B); qsort(frac, n, sizeof(Frac), comp); for (i = 0; i < n; ++i) printf("%d %d\n", frac[i].A, frac[i].B); return 0; }