zoukankan      html  css  js  c++  java
  • 【积累】排序题积累

    洛谷P1417

    挺好的一道排序题了。

     主要是不会怎么去排序。然后就是01背包。

    洛谷的题解说得很好。有详细的cmp推导。

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int mod=1e9+7;
    const int maxn=1e5+50;
    struct P{
        ll a,b,c;
        bool operator <(const P&p)const{return p.b*c<b*p.c;}
    }p[maxn];
    int main()
    {
        ll n,T,i,j,k,t,w,ans=0;
        ll f[maxn]={0};
        scanf("%lld%lld",&T,&n);
        for(i=1;i<=n;i++)scanf("%d",&p[i].a);
        for(i=1;i<=n;i++)scanf("%d",&p[i].b);
        for(i=1;i<=n;i++)scanf("%d",&p[i].c);
        sort(p+1,p+1+n);
        for(i=1;i<=n;i++)
        {
            for(j=T;j>=p[i].c;j--)
            {
                f[j]=max(f[j],f[j-p[i].c]+p[i].a-p[i].b*j);
                ans=max(ans,f[j]);
            }
        }
        printf("%lld
    ",ans);
    }

    2019-09-09 23:11:21

    /////////////////////////////

    Fight Against Monsters

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int maxn=5e5+50;
    const int inf=0x3f3f3f3f;
    ll atk,tim;
    struct P{
        ll h,a;
        bool operator <(const P&p)const{return a*p.h>p.a*h;}
    };
    int main()
    {
        ll a[550]={0};
        for(int i=1;i<=500;i++)
        {
            a[i]=i*(i+1)/2;
        }
        int T,u;
        scanf("%d",&T);
        P p[maxn];
        for(u=1;u<=T;u++)
        {
            ll n,i,ans=0,t,j,num=0;
            atk=0;tim=0;
            scanf("%lld",&n);
            for(i=1;i<=n;i++)
            {
                scanf("%lld%lld",&p[i].h,&p[i].a);
                atk+=p[i].a;
                t=lower_bound(a,a+500,p[i].h)-a;
                p[i].h=t;       
                tim+=t;
            }
            sort(p+1,p+1+n);
            for(i=1;i<=n;i++)
            {
                ans+=atk*p[i].h;
                atk-=p[i].a;
            }
            printf("Case #%d: ",u);
            printf("%lld
    ",ans);
        }

    //////////////////////////////////

    特别水的排序题 然而我想得特别复杂,结果它其实特别水。洛谷P2945

    #include<bits/stdc++.h>
    #define debug printf("!")
    using namespace std;
    typedef long long ll;
    const int maxn=1e5+50;
    int n,x,y;
    inline int get(int a,int b)
    {
        if(a>b)return (a-b)*y;
        return (b-a)*x;
    }
    int main()
    {
        int i,j,k,m[maxn],b[maxn],ans=0;
        scanf("%d%d%d",&n,&x,&y);
        for(i=0;i<n;i++)
            scanf("%d%d",&m[i],&b[i]);
        sort(b,b+n);
        sort(m,m+n);
        for(i=0;i<n;i++)ans+=get(m[i],b[i]);
        printf("%d
    ",ans);
    }

     /////////////////////////////////////////////

  • 相关阅读:
    手机号码正则(已测试可以)
    查看phpfpm的进程和端口号
    JS正则表达式验证是否为11位有效手机号码,
    访问HTML可以,访问PHPfile not found
    戏说论文、技术文档与网络文字的区别
    Sun 一线产品的图标
    VC编程中如何设置对话框的背景颜色和静态文本颜色
    Sun 一线产品的图标
    Web Beans首个预览版发布
    Web Beans首个预览版发布
  • 原文地址:https://www.cnblogs.com/kkkek/p/11479397.html
Copyright © 2011-2022 走看看