8 条题解
-
4
这种题,我们可以轻松地打出 AC 代码。
正常做法( 5ms ):
#include <cstdio> using namespace std; int n; double maxn = -0x7fffffff; //负无穷大 int main(void){ scanf("%d" , &n); for(register int i = 0;i < n;i++){ //快快快 int a , b , h; scanf("%d%d%d" , &a , &b , &h); maxn = (a + b) * h / 2.0 > maxn? (a + b) * h / 2.0 : maxn; //热知识:cstdio里没有 max ,max在iostream里 } printf("%.1lf" , maxn); //保留1位小数输出 }
“C++的好处都有啥,STL和万能头。”
因此,本题肯定也能用 STL 做出。
现在终于要介绍本题解的主角了——优先队列
事先,你要导入头文件
#include <queue>
,这个头文件里包含着priority_queue
(优先队列)。那么优先队列要怎么用呢?看完下面代码就知道了。
#include <iostream> //cin #include <queue> //优先队列(STL) using namespace std; int n; priority_queue <int> q; //优先队列 int main(void){ cin >> n; //输入 for(int i = 0;i < n;i++){ int a; cin >> a; q.push(a); //加入优先队列中 } for(int i = 0;i < n;i++){ cout << q.top() << " "; //取末尾 q.pop(); //弹出 } }
输入:
5 3 2 9 0 7
输出:
9 7 3 2 0
因此,我们可以利用这个小特性,来 AC 掉这题。
非正常做法( 10ms ):
#include <cstdio> //printf #include <queue> //队列(STL) using namespace std; int n; priority_queue <double> q; //优先队列 int main(void){ scanf("%d" , &n); //输入 while(n--){ int a , b , h; scanf("%d%d%d" , &a , &b , &h); q.push((a + b) * h / 2.0); //加入队列中 } printf("%.1lf" , q.top()); //因为此优先队列的特性,因此只需输出队列最上面那一项即可。 }
-
3
#挑战全网行数最少(5行)
#include <bits/stdc++.h> struct A {float a, b, c, d;}x[105]; int n; bool cmp(A k, A l){return k.d > l.d;} int main(){scanf("%d", &n);for (int i = 1;i <= n;i++){scanf("%f%f%f", &x[i].a, &x[i].b, &x[i].c);x[i].d = (x[i].a + x[i].b) * x[i].c / 2;}std::sort(x + 1, x + n + 1, cmp);printf("%.1f", x[1].d);}
严禁
抄袭打包带走!!!作者会很伤心的 -
3
//啊这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这太简单了 //附:这是四星题单吗 //当然,既然来了,就好好做一下 //版本1:远古版(知识点:1星) //#include <bits/stdc++.h> //using namespace std; //int main() //{ // double n,a,b,h,s,maxx = 1.0; 用double会方便亿点吧 // cin >> n; // for(int i = 1;i <= n;i++) // { // cin >> a >> b >> h; // s = (a + b) * h / 2.0; // maxx = max(maxx,s); 万能头文件真是妙啊 * 1 // } // cout << fixed << setprecision(1) << maxx; 万能头文件真是妙啊 * 2 // return 0; //} //版本2:亿丢丢凑合的高级版(知识点:勉强凑合后4星) #include <bits/stdc++.h> using namespace std; //创造一个很(没)有必要的数据结构体 struct Tx{ double a,b,h,s; }; //再创造一个更(木)有意义的cmp bool cmp(Tx a1,Tx a2) { return a1.s > a2.s; } Tx c[105]; int main() { int n; cin >> n; for(int i = 1;i <= n;i++) //这里嗯只是为了用一下sort才用数组滴 { cin >> c[i].a >> c[i].b >> c[i].h; c[i].s = (c[i].a + c[i].b) * c[i].h / 2.0; } sort(c + 1,c + n + 1,cmp); //结构体排序 cout << fixed << setprecision(1) << c[1].s; return 0; }
- 1
信息
- ID
- 327
- 时间
- 1000ms
- 内存
- 16MiB
- 难度
- 3
- 标签
- 递交数
- 425
- 已通过
- 219
- 上传者