本题很简单,变形虫的长度合成满足一定公式,只要每次从所有变形虫当中取出最长的两只合成新虫放进长度集合即可
由于要不断取最大值,可以考虑用优先权队列或者堆
Source Code
Problem: 1862 | User: yangliuACMer | |
Memory: 272K | Time: 47MS | |
Language: C++ | Result: Accepted |
#include <iostream>
#include <queue>
#include <cmath>
using namespace std;
int main(){
int n,i;
double a,b,t;
priority_queue<double> pq;
cin>>n;
for(i = 0; i < n; i++){
cin>>t;
pq.push(t);
}
while(pq.size() > 1){
a = pq.top();
pq.pop();
b = pq.top();
pq.pop();
t = 2 * sqrt(a * b);
pq.push(t);
}
//printf("%.3lf\n",pq.top()); 采用C++的写法
cout.setf(ios::fixed);
cout.precision(3);
cout << pq.top() << endl;
return 0;
}