题解 | #[NOIP2011]选择客栈#

[NOIP2011]选择客栈

https://ac.nowcoder.com/acm/problem/16594

思路

枚举右端点 i 
当 fee[i] <= p 时,对其有贡献的左端点是:i 左侧所有与 i 同色的点
当 fee[i] > p 时,对其有贡献的左端点分为两种:
(1) i 左侧,所有与 i 同色的,fee[j] <= p 的 j 点   显然: 位置 j < 位置 i
(2) i 左侧,所有与 i 同色的,在某个 j 点左侧的点    ps:j 就是 (1) 中的 j

为了方便 fee[i] > p 的情况,我们在 fee[i] <= p 时 才对 num[color] 进行更新

注:
color[i] :第 i 个客栈的配色
num[color]:配色为 color 的客栈数目
temp:上一个 fee <= p 的点

Code

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

const int N = 2e6+10,M=1e4+10;

int color[N],num[M];
int n,k,p;
int temp;
ll ans;

int main(){
    cin>>n>>k>>p;
    for(int i=1;i<=n;i++){
        int fee;
        cin>>color[i]>>fee;
        if(fee<=p){
            for(int j=i;j>temp;j--) num[color[j]]++;
            temp=i;
            ans+=num[color[i]]-1;
        }
        else ans+=num[color[i]];
    }
    cout<<ans<<endl;
    return 0;
}
全部评论

相关推荐

野猪不是猪🐗:我assume that你must技术aspect是solid的,temperament也挺good的,however面试不太serious,generally会feel style上不够sharp
点赞 评论 收藏
分享
03-24 16:56
已编辑
肇庆学院 后端
一天代码十万三:你看看人家进大厂的简历就知道了,你这个学历得acm+大厂实习+熟悉底层+运气很好 才有可能进某个大厂,因为大部分是直接卡学历的
投递快手等公司10个岗位
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务