codeforces-1027 C Minimum Value Rectangle

时间:2022-08-08 22:52:28
 1 #include <iostream>
 2 #include <unordered_map>
 3 #include <algorithm>
 4 #include <vector>
 5 #include <queue>
 6 #define DEF 0x3f3f3f3f
 7 using namespace std;
 8 
 9 int main()
10 {
11     int T;
12     scanf("%d",&T);
13     while(T --)
14     {
15         int n;
16         int hash[10001] {0};
17         vector<int> deal;
18         double diff = 10001;
19         int edge1 = 0,edge2 = 0;
20         int flag = 0;
21         
22         scanf("%d\n",&n);
23         while(n --)
24         {
25             int tmp;
26             scanf("%d",&tmp);
27             hash[tmp] ++;
28             if(hash[tmp]==2)
29                 deal.emplace_back(tmp);
30             if(hash[tmp]==4)
31             {
32                 flag = 1;
33                 edge1 = edge2 = tmp;
34             }
35         }
36         
37         if(flag)
38         {
39             printf("%d %d %d %d\n",edge1,edge1,edge2,edge2);
40             continue;
41         }
42         sort(deal.begin(),deal.end());
43         double minidiff = DEF;
44         for(int i = 0; i < deal.size()-1; i ++)
45         {
46             double tmp_diff = (double)deal[i+1]/(double)deal[i] + (double)deal[i]/(double)deal[i+1];
47         //    cout << deal[i+1] << " " << deal[i] << " " << tmp_diff << endl;
48             if(tmp_diff<diff)
49             {
50                 edge1 = deal[i];
51                 edge2 = deal[i+1];
52                 diff = tmp_diff;
53             }
54         }
55         printf("%d %d %d %d\n",edge1,edge1,edge2,edge2);
56     }
57     return 0;
58 }