CF1203B Equal Rectangles



双指针,一个从前往后扫,一个从后往前扫,如果过到最后撑起来答案都是一样的,就yes否则no


#include <iostream>
#include <stdio.h>
#include <string.h>
#include <vector>
#include <algorithm>
#define int long long 
using namespace std ;
int x , n , T ;
int a[500] , b[500] , vis[14000] , tot = 0 , flag = 0 ;
vector<int>v ;
signed main () {
	cin >> T ;
	while(T --) {
		v.clear() ;
		memset(vis,0,sizeof(vis)) ;
		memset(b,0,sizeof(b)) ;
		cin >> n ;tot = 0 ;flag = 0 ;
		for(int i = 1 ; i <= 4*n ; i ++) {
			cin >> a[i] ;
			if(!vis[a[i]]) {
				b[++tot] = a[i];
				vis[a[i]] ++ ;
			}else {
				vis[a[i]] ++ ;
			}
		}
		for(int i = 1 ; i <= tot ; i ++) {
			if(vis[b[i]] % 2 == 1 ) {
				//cout << "NO\n" <<endl ;
				//continue ;
				flag = 1 ;
			} else {
				vis[b[i]] /= 2 ;
			}
		}
		for(int i = 1 ; i <= tot ; i ++) {
			for(int j = 1 ; j <= vis[b[i]] ; j ++) {
				v.push_back(b[i]) ; 
			}
		}
		sort(v.begin(),v.end()) ;
 
		int tot = v[0] * v[v.size()-1] ;int l = 0 ;
		while(l < n ) {
			if(v[l]*v[2*n-l-1] != tot ) {
				flag = 1 ;
			}
			l ++ ;
			
		}
		if(!flag)
		puts("YES") ;
		else puts("NO") ;
	}
	return 0 ;
}

溜了溜了

posted @ 2019-08-22 19:27  _L_Y_T  阅读(128)  评论(0编辑  收藏  举报