結果

問題 No.698 ペアでチームを作ろう
ユーザー ciel
提出日時 2018-06-09 18:41:40
言語 C++17(clang)
(17.0.6 + boost 1.87.0)
結果
AC  
実行時間 160 ms / 1,000 ms
コード長 1,474 bytes
コンパイル時間 761 ms
コンパイル使用メモリ 121,600 KB
実行使用メモリ 5,248 KB
最終ジャッジ日時 2024-11-30 12:26:58
合計ジャッジ時間 2,723 ms
ジャッジサーバーID
(参考情報)
judge2 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 12
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <vector>
#include <algorithm>
#include <cstdio>
using namespace std;

template <class BidirectionalIterator>
bool next_combination(BidirectionalIterator first1,
	BidirectionalIterator last1,
	BidirectionalIterator first2,
	BidirectionalIterator last2)
{
	if(( first1 == last1 ) || ( first2 == last2 ))return false;
	BidirectionalIterator m1 = last1;
	BidirectionalIterator m2 = last2; --m2;
	while(--m1 != first1 && !(* m1 < *m2 ));
	bool result = (m1 == first1 ) && !(* first1 < *m2 );
	if(!result){
		while( first2 != m2 && !(* m1 < * first2 ))++first2;
		first1 = m1;
		iter_swap(first1 , first2 );
		++ first1;
		++ first2;
	}
	if(( first1 != last1 ) && ( first2 != last2 )){
		m1 = last1 ; m2 = first2 ;
		while(( m1 != first1 ) && (m2 != last2 )){
			iter_swap (--m1 , m2 );
			++m2;
		}
		reverse(first1 , m1);
		reverse(first1 , last1);
		reverse(m2 , last2);
		reverse(first2 , last2);
	}
	return !result;
}
template <class BidirectionalIterator>
bool next_combination (BidirectionalIterator first,
	BidirectionalIterator middle,
	BidirectionalIterator last)
{return next_combination(first , middle , middle , last);}

int main(){
	int n,r=0;
	scanf("%d",&n);
	vector<int> v(n);
	for(int i=0;i<n;i++)scanf("%d",&v[i]);
	sort(v.begin(),v.end());
	do{
		do{
			int s=0;
			for(int i=0;i<n/2;i++)s+=v[i]^v[i+n/2];
			r=max(s,r);
		}while(next_permutation(v.begin()+n/2,v.end()));
	}while(next_combination(v.begin(),v.begin()+n/2,v.end()));
	printf("%d",r);
}
0