• $Noip2011/Luogu1311$ 选择客栈


    $Luogu$

    $Sol$

    暴力十分显然叭.正解不是很好想.

    我最开始想维护所有色调的客栈的前缀和后缀,然后每扫到一个最低消费合法的就统计一次答案.但是这样会重复计数,两个合法客栈之间有几个消费合法的客栈它们就会被算几次.既然喝咖啡的客栈不能作为计数的基准点,那就换一个叭.换成前一个住宿的客栈或后一个都可以,下面写的是以后一个客栈为基准点的做法:

    从$1$扫到$N$,记录$sum[i]$为扫过的色调为$i$的客栈有多少个.$hf[i]$扫过的色调为$i$的和现在这个客栈之间有最低消费不大于$p$的客栈的客栈数.维护$so easy.$

     

    $Code$

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<queue>
    #include<algorithm>
    #define il inline
    #define Rg register
    #define go(i,a,b) for(Rg int i=a;i<=b;++i)
    #define yes(i,a,b) for(Rg int i=a;i>=b;--i)
    #define mem(a,b) memset(a,b,sizeof(a))
    #define ll long long
    #define db double
    #define inf 2147483647
    using namespace std;
    il int read()
    {
        Rg int x=0,y=1;char c=getchar();
        while(c<'0'||c>'9'){if(c=='-')y=-1;c=getchar();}
        while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+c-'0';c=getchar();}
        return x*y;
    }
    const int N=60;
    int n,k,p,s[N],hf[N];
    ll as;
    int main()
    {
        n=read(),k=read(),p=read();
        go(i,1,n)
        {
            Rg int col=read(),cos=read();
            if(cos<=p)
                go(j,0,k)hf[j]=s[j];
            as+=hf[col];
            s[col]++;
            if(cos<=p)hf[col]++;
        }
        printf("%lld
    ",as);
        return 0;
    }
    View Code
  • 相关阅读:
    (备忘)jeecg的$.dialog的一些参数
    jquery中的ajax方法(备忘)
    linux(centos7)设置tomcat开机启动
    centos7设置静态IP地址
    golang 之 sql
    golang 之 flag
    golang 之 context包
    golang 之文件操作
    golang之strings
    golang 函数和方法
  • 原文地址:https://www.cnblogs.com/forward777/p/11413308.html
Copyright © 2020-2023  润新知