zoukankan      html  css  js  c++  java
  • 【POJ 2572 Advertisement】

    Time Limit: 1000MS
    Memory Limit: 10000K

    Total Submissions: 947
    Accepted: 345
    Special Judge

    Description

    The Department of Recreation has decided that it must be more profitable, and it wants to sell advertising space along a popular jogging path at a local park. They have built a number of billboards (special signs for advertisements) along the path and have decided to sell advertising space on these billboards. Billboards are situated evenly along the jogging path, and they are given consecutive integer numbers corresponding to their order along the path. At most one advertisement can be placed on each billboard.
    A particular client wishes to purchase advertising space on these billboards but needs guarantees that every jogger will see it's advertisement at least K times while running along the path. However, different joggers run along different parts of the path.
    Interviews with joggers revealed that each of them has chosen a section of the path which he/she likes to run along every day. Since advertisers care only about billboards seen by joggers, each jogger's personal path can be identified by the sequence of billboards viewed during a run. Taking into account that billboards are numbered consecutively, it is sufficient to record the first and the last billboard numbers seen by each jogger.
    Unfortunately, interviews with joggers also showed that some joggers don't run far enough to see K billboards. Some of them are in such bad shape that they get to see only one billboard (here, the first and last billboard numbers for their path will be identical). Since out-of-shape joggers won't get to see K billboards, the client requires that they see an advertisement on every billboard along their section of the path. Although this is not as good as them seeing K advertisements, this is the best that can be done and it's enough to satisfy the client.
    In order to reduce advertising costs, the client hires you to figure out how to minimize the number of billboards they need to pay for and, at the same time, satisfy stated requirements.

    Input

    The first line of the input contains two integers K and N (1 <= K, N <= 1000) separated by a space. K is the minimal number of advertisements that every jogger must see, and N is the total number of joggers.
    The following N lines describe the path of each jogger. Each line contains two integers Ai and Bi (both numbers are not greater than 10000 by absolute value). Ai represents the first billboard number seen by jogger number i and Bi gives the last billboard number seen by that jogger. During a run, jogger i will see billboards Ai, Bi and all billboards between them.

    Output

    On the fist line of the output file, write a single integer M. This number gives the minimal number of advertisements that should be placed on billboards in order to fulfill the client's requirements. Then write M lines with one number on each line. These numbers give (in ascending order) the billboard numbers on which the client's advertisements should be placed.

    Sample Input

    5 10
    1 10
    20 27
    0 -3
    15 15
    8 2
    7 30
    -1 -10
    27 20
    2 9
    14 21

    Sample Output

    19
    -5
    -4
    -3
    -2
    -1
    0
    4
    5
    6
    7
    8
    15
    18
    19
    20
    21
    25
    26
    27
    

    Source

    Northeastern Europe 1999

    【题解】

              ①典型的区间前缀和约束的差分约束问题

              ②处理负数坐标可以加上一个很大的整数

    #include<queue>
    #define _ 10010
    #include<stdio.h>
    #include<algorithm>
    #define inf 1000000007
    #define go(i,a,b) for(int i=a;i<=b;i++)
    #define fo(i,a,x) for(int i=a[x],v=e[i].v;i;i=e[i].next,v=e[i].v)
    using namespace std;
    const int N=30003;
    queue<int>q;bool inq[N];
    struct E{int v,next,w;}e[N<<1];
    int n,K,k=1,a[N],b[N],head[N],S=1e9,T,d[N];
    void ADD(int u,int v,int w){e[k]=(E){v,head[u],w};head[u]=k++;}
    
    void Build()
    {
    	go(i,1,n)scanf("%d%d",a+i,b+i),a[i]+=_,b[i]+=_;
    	go(i,1,n)if(a[i]>b[i])a[i]^=b[i]^=a[i]^=b[i];
    	go(i,1,n)ADD(a[i]-1,b[i],min(b[i]-a[i]+1,K));
    	go(i,1,n)S=min(S,a[i]-1),T=max(T,b[i]);
    	go(i,S,T)ADD(i,i-1,-1);	
    	go(i,S,T)ADD(i,i+1,0);
    }
    
    void SPFA()
    {
    	go(i,S,T)d[i]=-inf;d[S]=0;q.push(S);int u;
    	while(!q.empty())
    	{
    		inq[u=q.front()]=0;q.pop();
    		fo(i,head,u)if(d[u]+e[i].w>d[v])
    		{
    			d[v]=d[u]+e[i].w;
    			!inq[v]?q.push(v),inq[v]=1:1;
    		}
    	}
    	printf("%d
    ",d[T]);
    	go(i,S,T)if(d[i]>d[i-1])printf("%d
    ",i-_);
    }
    
    int main()
    {
    	scanf("%d%d",&K,&n);
    	
    	Build();  SPFA();
    	
    	return 0;
    }//Paul_Guderian
    

    .

  • 相关阅读:
    CentOS中文件夹基本操作命令
    Apache和Nginx下禁止访问特定的目录或文件
    自适应网页设计(Responsive Web Design)
    使用Google Https搜索
    AMD 3600+ X2 CPU配合昂达A69T主板超频教程
    dedecms上传图片相对路径改成绝对路径方法
    安装ecshop默认安装后的错误解决方案
    动态加载JS脚本的4种方法
    Java虚拟机(二)对象的创建与OOP-Klass模型
    Android系统启动流程(四)Launcher启动过程与系统启动流程
  • 原文地址:https://www.cnblogs.com/Damitu/p/7797205.html
Copyright © 2011-2022 走看看