POJStrpies优先队列(判断有坑限制条件)

    xiaoxiao2022-07-07  140

    POJ Strpies 优先队列 链接:https://cn.vjudge.net/problem/POJ-1862 样例: 若有关于优先队列的问题 参见blog:https://blog.csdn.net/qq_19656301/article/details/82490601 该题典型优先队列类型 每次安排两个最小的进行碰撞,直到剩下最后一个(注意坑 此处判断条件!!!重要!!!) 大佬说 贪心策略 小白…不晓得… 一开始直接用C语言写的 二次循环排序 然后比较大小 用数组储存 基本算法

    #include <stdio.h> #include <math.h> int main(void) { int n,i,j; double arr[100]; double t; scanf("%d",&n); for(i=0;i<n;i++) scanf("%lf",&arr[i]); if(n==1) printf("%.3lf\n",arr[0]); else { for(i=0;i<n-1;i++) { for(j=i+1;j<n;j++) { if(arr[i]>arr[j]) { t=arr[i]; arr[i]=arr[j]; arr[j]=t; } } } for(i=n-2;i>=0;i--) arr[i]=2*sqrt(arr[i]*arr[i+1]); printf("%.3lf\n",arr[0]); } return 0; }

    C++可以使用优先队列 但…WA+TLE 很多次才AC掉 … 忘了基本的条件

    !!! 要保证最后的队列里边至少剩余一个元素 ( 判断条件要写P.size()>1儿不能写成!P.empty() ) 坑坑坑!!! 细心看条件啊…否则一直TLE… 代码如下:

    #include <iostream> #include <cmath> #include <queue> #include <cstdio> using namespace std; int main(void) { priority_queue<double>pq; int i,n; double x; double a,b,t; cin>>n; for(i=0;i<n;i++) { cin>>x; pq.push(x); } 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()); return 0; }

    至此 STL所有题已经刷完 接下来就是数据结构了… orz 加油鸭 ❀ !!! 成功的路并不拥挤,因为大部分人都在颓

    最新回复(0)