zoukankan      html  css  js  c++  java
  • NOIP2011 选择客栈

    题目

    vijos1737

    题解

    用ans[i]记录1~i中能与i组合的客栈总数

    那么对于色调相同且距离最近的i,j (i < j),若ij中有可去的咖啡店,那么ans[j]即为j以前色调与j相同的客栈总数;若ij中无可去的咖啡店,那么ans[]=ans[i]

    代码

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <algorithm>
    #include <cmath> 
    #define N 200005
    using namespace std;
    
    int n,k,p,out;
    int color,cost;
    int last[55];//last[i]记录颜色i上一次出现的位置 
    int sum[N];//将可以去的咖啡店记为1,不能去的记为0,sum[i]记录前缀和 
    int ans[N];//ans[i]记录1~i中能与i组合的客栈总数 
    int num[55];//num[i]记录颜色为i的客栈在之前出现过几次 
    
    int main()
    {
    	scanf("%d%d%d",&n,&k,&p);
    	for(int i=1;i<=n;i++)
    	{
    		scanf("%d%d",&color,&cost);
    		if(cost<=p) sum[i]=sum[i-1]+1;
    		else sum[i]=sum[i-1]; 
    		if(!last[color]) last[color]=i;
    		else
    		{
    			if(sum[i]-sum[last[color]-1]) ans[i]=num[color];
    			else ans[i]=ans[last[color]];
    			last[color]=i;
    		}
    		num[color]++;
    	}
    	for(int i=1;i<=n;i++) out+=ans[i];
    	printf("%d",out);
    	return 0;
    }
  • 相关阅读:
    CF1580B Mathematics Curriculum
    [机房测试]变异大老鼠
    http_缓存
    UDP_概述
    记录: webAssembly 延申
    Event
    NetWork_timeLine
    基于Typora的Latex代码书写并移植到word中
    ZooKeeper学习总结
    HBase学习总结
  • 原文地址:https://www.cnblogs.com/XYZinc/p/7551312.html
Copyright © 2011-2022 走看看