Noip 2011 选择客栈 - 模拟

当出现了一个消费小于p的咖啡店时,这个客栈之前所有与他相同颜色的客栈都可以组成答案。
用last[]表示某个颜色的最后出现位置,用tot[]表示某个颜色一共有多少个客栈,sum[]表示对于某个颜色,目前可选的客栈数量,now表示目前消费小于p的最后一个咖啡店

当出现了一个咖啡店,消费小于p,并且位置比最后一个i颜色咖啡店靠后,就可以把这个咖啡店前面所有的i颜色客栈都算到sum数组中,即sum[i] = tot[i]

#include <algorithm>
#include <iostream>
#include <cstdio>
using namespace std;
#define debug(x) cerr << #x << "=" << x << endl;
const int MAXK = 110;
int n,k,p,now,last[MAXK],tot[MAXK],sum[MAXK],ans;
int main() {
    cin >> n >> k >> p;
    for(int i=1; i<=n; i++) {
        int col, price;
        cin >> col >> price;
        if(price <= p) 
            now = i;
        if(now >= last[col])
            sum[col] = tot[col];
        last[col] = i;  
        ans += sum[col];
        tot[col]++; 
    }
    cout << ans;
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值