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; }