8 条题解

  • 4
    @ 2022-7-1 18:17:22

    这种题,我们可以轻松地打出 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
      @ 2024-2-6 14:55:42

      #挑战全网行数最少(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
        @ 2022-5-1 23:05:25
        //啊这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这太简单了
        //附:这是四星题单吗
        //当然,既然来了,就好好做一下
        
        //版本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;
        }
        
        • @ 2022-5-6 22:35:38

          我会使用python脚本调取网页日志比对每个人提交的代码,有抄袭会取消成绩~

      • 2
        @ 2023-5-25 20:50:01
        #include <iostream>
        #include <iomanip>
        using namespace std;
        int main()
        {
            double n,sum=0,a[1000],b[1000],c[1000];
            cin>>n;
            for(int i=1;i<=n;i++)
            {
                cin>>a[i]>>b[i]>>c[i];
                a[i]=(a[i]+b[i])*c[i]/2;
                if(a[i]>sum)
                {
                    sum=a[i];
                }
            }
            cout<<fixed<<setprecision(1)<<sum;
            return 0;
        }
        
        • 1
          @ 2023-5-21 21:38:49

          #include <bits/stdc++.h> using namespace std; int n; double a[4], k, b, c, maxx = 0; int main() { cin >> n; for (int i = 1;i <= n;i++) { cin >> k >> b>> c; a[i] = (k + b) * c / 2; maxx = max(maxx, a[i]); } cout << fiexd << setprecision(maxx); return 0; }

          • 1
            @ 2022-4-24 16:13:56

            鼓励大家写题解,但注意题解格式。

            给代码两端加上这个会舒服一些

            ```cpp

            你的代码

            ```

            </span>

            这个点在键盘的左上角tab上面那个键,注意切换输入法

            #include<iostream>
            using namespace std;
            int main()
            {
                int n;
                cin>>n;//这是一个注释
                return 0;
            } 
            

            请注意严禁抄袭题解,写题解不要只放代码,需加上你的思路或代码注释。

            抄袭题解一经发现直接取消成绩。

            • 0
              @ 2023-5-21 21:39:00

              #include <bits/stdc++.h> using namespace std; int n; double a[4], k, b, c, maxx = 0; int main() { cin >> n; for (int i = 1;i <= n;i++) { cin >> k >> b>> c; a[i] = (k + b) * c / 2; maxx = max(maxx, a[i]); } cout << fiexd << setprecision(maxx); return 0; }

              • 0
                @ 2022-8-23 14:24:12
                for (int i=1;i<=n;i++)
                {
                    cin>>a>>b>>h;
                    maxx=max(maxx,(a+b)*h/2);
                }
                printf("%.1f",maxx);//保留2位小数
                
                • 1

                【入门】求最大梯形的面积

                信息

                ID
                327
                时间
                1000ms
                内存
                16MiB
                难度
                3
                标签
                递交数
                393
                已通过
                199
                上传者