zoukankan      html  css  js  c++  java
  • Tallest Cow

    POJ

    题意:(N(N<=10000))头牛站成一排,已知最高的牛的编号num以及身高H,还知道m对牛的关系(如a,b表示第a头牛与第b头牛之间的牛都比a,b两头牛要矮),求每头牛的最高身高.

    分析:对于已知的一对牛a,b,我们让第a+1到b-1头牛的身高全部减1即可,但每次这样操作显然会超时,所以考虑用一个数组d来记录,对于每一对关系,令d[a+1]-1,d[b]+1即可.最后的答案就是d数组的前缀和加上H.

    注意一个细节,有可能会有重复的关系,所以搞一个map来记录一下.

    //#include<bits/stdc++.h>
    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<cmath>
    #include<map>
    using namespace std;
    inline int read() {
        int x=0,o=1;char ch=getchar();
        while(ch!='-'&&(ch<'0'||ch>'9'))ch=getchar();
        if(ch=='-')o=-1,ch=getchar();
        while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
        return x*o;
    }
    const int N=1000005;
    int d[N],sum[N];
    map<pair<int,int>,bool>Map;
    int main(){
    	int n=read(),num=read(),H=read(),m=read();
    	for(int i=1;i<=m;++i){
    		int a=read(),b=read();
    		if(a>b)swap(a,b);
    		if(Map[make_pair(a,b)])continue;
    		Map[make_pair(a,b)]=true;
    		d[a+1]--;d[b]++;
    	}
    	for(int i=1;i<=n;++i){
    		sum[i]=sum[i-1]+d[i];
    		printf("%d
    ",sum[i]+H);
    	}
        return 0;
    }
    
    
  • 相关阅读:
    linux shell在while中用read从键盘输入
    ubuntu14.04折腾迅雷xware
    select与epoll分析
    ubuntu 14.04下练习lua
    C++中的重载、覆盖、隐藏
    删除ubuntu旧内核
    fcntl函数加文件锁
    系统中断与SA_RESTART
    linux使用共享内存通信的进程同步退出问题
    leetcode-easy-others-268 Missing Number
  • 原文地址:https://www.cnblogs.com/PPXppx/p/11227879.html
Copyright © 2011-2022 走看看