• NEERC 1999 Advertisement /// oj22646


    题目大意:

    输入k,n ;k为每位慢跑者最少应看到的广告牌数

    接下来n行 描述第 i 位慢跑者的途径路段

    输出需要设立的广告牌数 接下来每行为设立地点

    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

    题解:https://blog.csdn.net/shuangde800/article/details/7828537

    #include<iostream>
    #include<algorithm>
    #include<stdio.h>
    #include<stdlib.h>
    #include<cstring>
    using namespace std;
    struct num
    {
        int a,b;
        bool operator<(const num& p)const {
            return b<p.b;
        };
    }jog[1005];
    bool vis[20005];
    int main()
    {
        int n,k;
        while(~scanf("%d%d",&k,&n))
        {
            int st=20000,ed=0,ans=0;
            for(int i=0;i<n;i++)
            {
                int p,q; scanf("%d%d",&p,&q);
                jog[i].a=min(p,q)+10000;
                jog[i].b=max(p,q)+10000;
                st=min(st,jog[i].a);
                ed=max(ed,jog[i].b);
            }
            sort(jog,jog+n);
    //        for(int i=0;i<n;i++)
    //            printf("%d %d %d
    ",jog[i].a-10000,jog[i].b-10000,jog[i].b-jog[i].a);
            memset(vis,0,sizeof(vis));
            for(int i=0;i<n;i++)
            {
                int len=jog[i].b-jog[i].a+1;
                if(len<=k)
                {
                    for(int j=jog[i].a;j<=jog[i].b;j++)
                        if(!vis[j]) vis[j]=1,ans++;
                }
                else
                {
                    int cnt=0;
                    for(int j=jog[i].a;j<=jog[i].b;j++)
                        if(vis[j]) cnt++;
                    if(cnt>=k) continue;
                    for(int j=jog[i].b;j>=jog[i].a;j--)
                        if(!vis[j])
                        {
                            vis[j]=1; cnt++; ans++;
                            if(cnt>=k) break;
                        }
                }
            }
            printf("%d
    ",ans);
            for(int i=st;i<=ed;i++)
                if(vis[i]) printf("%d
    ",i-10000);
            printf("
    ");
        }
        return 0;
    }
  • 相关阅读:
    4-9 内置函数和匿名函数的题
    4-09 试题
    4--2日 函数 装饰器 作业题
    if 语句
    4-4日 内置函数,匿名函数
    4-4日 列表推导式,生成器推导式
    4-3日 迭代器 生成器
    4-2日装饰器,带参数的装饰器
    python 函数名 、闭包 装饰器 day13
    [LeetCode]-DataBase-Department Top Three Salaries
  • 原文地址:https://www.cnblogs.com/zquzjx/p/8870907.html
Copyright © 2020-2023  润新知