贪心算法求解付账问题(c++实现)

#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
const int N = 5e5+10;

int n;
long double s;
int q[N];


int main(){
    cin>>n>>s;
    for(int i=0;i<n;i++) scanf("%d",&q[i]);
    long double avg = s / n,res = 0;
    sort(q,q+n);
    for(int i=0;i<n;i++){
        long double cur = s/(n-i);
        if(cur>q[i]) cur = q[i];
        res += (avg - cur) * (avg - cur);
        s-=cur;
    }
    printf("%.4Lf",sqrt(res/n));
    
}

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
垃圾分类可以使用贪心算法求解。首先,我们需要将垃圾分成可回收垃圾、有害垃圾、厨余垃圾和其他垃圾四类。然后,我们可以按照以下步骤进行贪心算法求解: 1. 对于可回收垃圾,我们应该将其尽可能地分类,例如将废纸和废塑料分开放置。 2. 对于有害垃圾,我们应该按照规定的方式进行处理,例如将电池和荧光灯等有害垃圾单独放置。 3. 对于厨余垃圾,我们应该将其进行分类,例如将果皮和菜叶分开放置。 4. 对于其他垃圾,我们应该将其分类处理,例如将烟蒂和破碎的陶瓷放置在一起。 在贪心算法中,我们应该尽可能地将垃圾分类,以便于后续的处理和回收。在实际的垃圾分类中,还需要考虑到垃圾分类的具体情况,例如垃圾分类的规则、分类的方式等因素。以下是一个简单的C++代码示例: ``` #include<iostream> #include<algorithm> using namespace std; struct Garbage{ int type; // 垃圾类型:1-可回收垃圾,2-有害垃圾,3-厨余垃圾,4-其他垃圾 int weight; // 垃圾重量 }; bool cmp(Garbage a, Garbage b){ return a.type < b.type; // 按照垃圾类型从小到大排序 } int main(){ int n; // 垃圾数量 cin >> n; Garbage garbages[n]; for(int i=0;i<n;i++){ cin >> garbages[i].type >> garbages[i].weight; } sort(garbages, garbages+n, cmp); // 排序 int ans = 0; // 分类垃圾的数量 int pre = 0; // 前一类垃圾的位置 for(int i=1;i<n;i++){ if(garbages[i].type > garbages[pre].type){ // 如果垃圾类型发生变化 ans++; // 分类垃圾的数量加1 pre = i; // 更新前一类垃圾的位置 } } ans++; // 最后一类垃圾也需要分类 cout << ans << endl; return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值