题意:输入一组长方形的边长,询问是否能构成一组面积相同的长方形
思路:先检查这些边是否能构成长方形,即检查相同长度的边的个数是否为偶数
再将这些边的个数除以二,进行排序;
每次从有序的边中不放回地取出最长边和最短边相乘,检查其是否相等。
1 #include <iostream> 2 #include <vector> 3 #include <map> 4 #include <algorithm> 5 using namespace std; 6 int main(){ 7 int t; 8 cin>>t; 9 while(t --){ 10 map<int, int> cnt; 11 vector<int> note; 12 int n; 13 cin>>n; 14 n *= 4; 15 for(int i = 0; i < n; i ++){ 16 int inp; 17 cin>>inp; 18 cnt[inp] ++; 19 note.push_back(inp); 20 } 21 bool f = true; 22 for(map<int, int>::iterator it = cnt.begin();23 it != cnt.end(); 24 it ++){ 25 if(it->second & 1){ 26 f = false; 27 break; 28 } 29 for(int i = it->second; i; i -= 2) 30 note.push_back(it->first); 31 } 32 if(f == false) 33 cout<<"NO"<<endl; 34 else{ 35 int len = note.size(); 36 bool flag = true; 37 sort(note.begin(), note.end()); 38 int tmp = note[0]*note[len - 1]; 39 for(int i = 0; i < len / 2; i ++){ 40 if(note[i]*note[len - 1 - i] != tmp){ 41 flag = false; 42 break; 43 } 44 } 45 if(flag) 46 cout<<"YES"<<endl; 47 else 48 cout<<"NO"<<endl; 49 } 50 } 51 return 0; 52 }
Round#579(Div 3) B. Equal Rectangles
原文:https://www.cnblogs.com/quantumbird/p/11349595.html