题解 CF1203B 【Equal Rectangles】

Uichiha_Itachi

2019-08-17 15:08:15

Solution

咕了两天后过来写写。。。。。。 其实是小奥题......我自己都不知道为啥卡了十几分钟(还不是因为我蔡 先来一手排序,然后就可以从头到尾判一遍,如果有当对于每个奇数i,若$a_i \neq a_{i +1}$,则无法构成足够数量的矩形,可以直接输no处理其他情况。~~其实貌似不加这段特判也过得去,就是当时敲的时候怕出现一堆无法构成矩形的情况然后T掉~~ ~~然后算了一下发现这么搞常数反而会增大~~ 然后就是由矩形计算公式$S=ab$推出两个木棒拼成矩形时,若其面积全部相等,则必为最大的与最小的拼,次大的与次小的拼,以此类推。 然后就过掉了。数据与$a_i$无关,$n$还很小,面积也不会爆`int`,总之就很水( ~~这里吐槽一句这是什么神奇的数据范围啊~~ 代码(极长警告): ```cpp #include <bits/stdc++.h> using namespace std; int main() { int N; cin >> N; while(N--) { int n; cin >> n; int arr[401]; int k = 4 * n; for(int i = 1;i <= k;i++) { cin >> arr[i]; } sort(arr + 1,arr + k + 1); bool flaga = true; for(int i = 1;i <= k;i += 2) { if(arr[i] != arr[i + 1]) { flaga = false; break; } } if(!flaga) { cout << "NO" << endl; continue; } int area = arr[1] * arr[k]; bool flag = true; for(int i = 3,j = k - 2;i <= 2 * n;i += 2,j -= 2) { if(arr[i] * arr[j] != area) { flag = false; break; } } if(flag) cout << "YES" << endl; else cout << "NO" << endl; } return 0; } ```