洛谷贪心题单4.04

3 篇文章 0 订阅
1 篇文章 0 订阅

A- P1223 排队接水

#include<bits/stdc++.h>
using namespace std;

int main(){
    int a[100000], b[100000];
    int n;
    double s;
    cin >> n;
    for (int i = 1; i <= n;i++){
        cin >> a[i];
        b[i] = a[i];
    }
    sort(a + 1, a + 1 + n);
    for (int i = 1; i <= n;i++){
    for (int j = 1;j<=n;j++){
        if(a[i]==b[j]){
            printf("%d ", j);
            s += a[i] * (n - i);
            b[j] = 0;
            break;
        }
    }
    }
    printf("\n");
    printf("%.2f", s / n);
}

B- P1803 凌乱的yyy / 线段覆盖

#include<bits/stdc++.h>
using namespace std;
struct node{
    int s;
    int e;
}q[1000001];
bool cmp(node a,node b){
    return a.e<b.e;
}
int main(){
    int n,ans=0;
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>q[i].s>>q[i].e;
    }
    sort(q+1,q+n+1,cmp);
    int cnt=q[1].e;
    ans++;
    int i=1;
    while(i<=n){
        i++;
        if(cnt<=q[i].s){
        ans++;
        cnt=q[i].e;
        }
        
    }
    cout<<ans;

}

C- P3817 小A的糖果

    #include<bits/stdc++.h>
using namespace std;
#define ll long long 
ll a[1000005];
int main(){
    ll n,x;
    cin>>n>>x;
    ll ans=0;
    cin>>a[1];
    if(a[1]>x){
        ans+=a[1]-x;
        a[1]=x;
        }
    for(int i=2;i<=n;i++){
        cin>>a[i];
        if(a[i]+a[i-1]>x){
            ans+=a[i]+a[i-1]-x;
            a[i]=x-a[i-1];
        }
    }
    cout<<ans;

}

C----糖果传递

#include<bits/stdc++.h>
using namespace std;
int main(){
    int a[1000002],b[1000002];
    int n;
    long long sum=0;
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>a[i];
        sum+=a[i];
    }
    int cnt=sum/n;
    for(int i=1;i<n;i++){
        b[i]=b[i-1]-cnt+a[i];
    }
    sort(b,b+n);
    long long  ans=0;
    int mid=b[n>>1];
    for(int i=0;i<n;i++){
        ans+=abs(b[i]-mid);
    }
    cout<<ans;
    
    
    
}

D- P1478 陶陶摘苹果(升级版)

#include<bits/stdc++.h>
using namespace std;
struct node{
    int h;
    int s;
}q[10005];
bool cmp(node a,node b){
    return a.s<b.s;
}
int main(){
int n,k;
cin>>n>>k;
int ans=0;
int a,b;
cin>>a>>b;
int c=a+b;
for(int i=1;i<=n;i++){
    cin>>q[i].h>>q[i].s;
}
sort(q+1,q+1+n,cmp);
int i=1;
while(k>0&&i<=n){
    if(c>=q[i].h&&k>=q[i].s){
        ans++;
        k-=q[i].s;
    }
    i++;
}
cout<<ans;
}

E- P5019 [NOIP2018 提高组] 铺设道路

#include<bits/stdc++.h>
 using namespace std;
 int k[1000005];
 int main(){
     int n,t=0;
     cin>>n;
     for(int i=1;i<=n;i++){
         cin>>k[i]; 
     }
     for(int i=2;i<=n;i++){
         if(k[i-1]<k[i])
         t+=k[i]-k[i-1];
     }
     cout<<t+k[1];
    
 }

F- P1208 [USACO1.3]混合牛奶 Mixing Milk

#include<bits/stdc++.h>
using namespace std;
struct node{
    int a;
    int b;
}q[10000001];
bool cmp(node a,node b){
    return a.a<b.a;
}
int main(){
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=m;i++){
        cin>>q[i].a>>q[i].b;

    }
    sort(q+1,q+1+n,cmp);
    int ans=0;
    int i=1;
    while(n){
        if(n>=q[i].b){
            ans+=q[i].a*q[i].b;
            n-=q[i].b;
        }
        else{
            ans+=n*q[i].a;
            n=0;
        }
        i++;

    }
    cout<<ans;
}

G- P1094 [NOIP2007 普及组] 纪念品分组

//应该挺简单的,瞎写写就对了
#include<bits/stdc++.h> 
using namespace std;
int q[1000001];
int main(){
    int bag;
    cin>>bag;
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>q[i];
    }
    sort(q+1,q+1+n);
    int i=1,j=n;
    int ans=0;
    while(i<=j){
        if(q[i]+q[j]<=bag){
        ans++;
        i++;
        j--;
        }
      else{
          ans++;
           j--;
      }
    }
    cout<<ans;
    
}

H- P2240 【深基12.例1】部分背包问题

#include<bits/stdc++.h>
using namespace std;
struct node{
    int a;
    int b;
}q[100001];
bool cmp(node x,node y){
    return (x.b/(x.a*1.0)) > (y.b/(y.a*1.0));
}
int main(){
    int n,bag;
    cin>>n>>bag;
    for(int i=1;i<=n;i++){
        cin>>q[i].a>>q[i].b;
      
    }
    sort(q+1,q+1+n,cmp);
    double ans=0;
    int i=1;
    while(bag&&i<=n){
        if(bag>=q[i].a){
            ans+=q[i].b;
            bag-=q[i].a;}
        else{
            ans+=bag*q[i].b/(q[i].a*1.0);
            bag=0;
        }
        i++;
        
    }
    printf("%.2f",ans);
    return 0;
}

I- P1090 [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    int a[2000002];
    cin >> n;
    for (int i = 1; i <= n; i++)
    {
        cin >> a[i];
    }
    sort(a + 1, a + 1 + n);
    int sum = 0;
    a[2] = a[1] + a[2];
    sum += a[2];
    for (int i = 3; i < n; i++)
    {
        if (a[i - 1] <= a[i + 1])
        {
            a[i] = a[i - 1] + a[i];
        }
        else
        {
            swap(a[i - 1], a[i + 1]);
            a[i] = a[i - 1] + a[i];
        }
        sum += a[i];
    }
    if (n > 2)
    {
        a[n] = a[n - 1] + a[n];
        sum += a[n];
    }
    cout << sum;
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值