zoukankan      html  css  js  c++  java
  • 洛谷P1090 合并果子

    这道题只需要把最小的两个果堆加起来就可以了,好多大佬都用的是优先队列,但由于本人太菜,只好用数组做。

    如果这样想,那么每合并一次都需要排一次序,但事实上并不需要这么做(而且这样会超时,我之前用sort函数排就过了四个点,后面全都tle了),只需要给新合并的果堆找到所在的位置,并且将空的果堆删除就可以了。

    下面AC代码。

     1 #include <iostream>
     2 #include <algorithm>
     3 #include <queue>
     4 #include <cstdio>
     5 #include <string>
     6 #include <cstring>
     7 
     8 using namespace std;
     9 
    10 int a[100000];
    11 
    12 int main() 
    13 { 
    14     int n, sum = 0;
    15     cin >> n;
    16     for (int i = 1; i <= n; i++)
    17     {
    18         cin >> a[i];
    19     }
    20     sort(a + 1, a + n + 1);
    21     while (1)
    22     {
    23         int j = 1;
    24         while (a[j] == 0)
    25         {
    26             j++;
    27         }
    28         if (j == n)
    29         {
    30             break;
    31         }
    32         else 
    33         {
    34             a[j] += a[j + 1];
    35             sum += a[j];
    36             for (int l = j + 1; l<n; l++)
    37             {
    38                 a[l] = a[l + 1];
    39             }
    40             n--;
    41         }
    42         for (int l = j; l<n; l++)
    43         {
    44             if (a[l]>a[l + 1])
    45             {
    46                 swap(a[l], a[l + 1]);
    47             }
    48         }
    49     }
    50     cout << sum << endl;
    51     return 0;
    52 }

    更多代码请进入:https://github.com/tomatoschool

  • 相关阅读:
    7.逻辑回归实践
    6.逻辑回归
    5.线性回归算法
    4.K均值算法应用
    3.k均值的算法
    2.机器学习相关数据基础
    1.机器学习概论
    作业十五——语法制导的语义翻译
    第03组 Beta冲刺(3/4)
    第03组 Beta冲刺(2/4)
  • 原文地址:https://www.cnblogs.com/zxfzxf/p/9558822.html
Copyright © 2011-2022 走看看