JOI2006年模擬試験1 問題3@C++(86)

最近の予選よりは模擬試験のほうが難しい気がする。

#include <cstdio>
#include <algorithm>
#include <vector>
#include <queue>

using namespace std;

int decimal_digit(int a)
{
	int ret=1;
	while(a) {
		ret=ret*10;
		a=a/10;
	}
	return ret;
}

int main(int argc,char* argv[])
{
	int n;
	scanf("%d\n",&n);
	priority_queue<int> a_que;
	for(int i=0;i<n;i++) {
		int a;
		scanf("%d\n",&a);
		a_que.push(a);
		if(a_que.size()>4)a_que.pop();
	}
	vector<int> a_vec;
	while(a_que.size()) {
		a_vec.push_back(a_que.top());
		a_que.pop();
	}
	priority_queue<int> p_que;
	for(vector<int>::iterator i=a_vec.begin();i!=a_vec.end();i++) {
		for(vector<int>::iterator j=a_vec.begin();j!=a_vec.end();j++) {
			if(i!=j) {
				p_que.push((*i)*decimal_digit(*j) + (*j));
				if(p_que.size()>3)p_que.pop();
			}
		}
	}
	printf("%d\n",p_que.top());
	return 0;
}