9503 懒人选座位

9503 懒人选座位

时间限制:500MS  内存限制:65535K
提交次数:0 通过次数:0

题型: 编程题   语言: G++;GCC

Description

    在ACM混了一年之后,我终于有机会在新生赛出题了。然后我瞬间出了一道题。
    (好吧,我承认,我只是翻译了原题而已╮(╯▽╰)╭)
    发过去给lyd,然后马上被鄙视了:“这么简单的题目?”
    哎,没办法啊,过去一年我就是切水题过来的~~
    其实我个人认为这题还是挺有趣的……水水更健康吗……大家一起来切水题吧!
    相信大家都有这样的体验吧:课室里每行座位间的间距都很小,上课的时候,早到的同学都要侧身或者站起来,让其他同学坐进去里面。╮(╯▽╰)╭ 我是一个很懒的人,假如我是第一个到场,我希望选了座位之后,侧身让位的次数能够尽量地少……
    现在有一排n个空座位,从左到右分别编号1 ~ n。 然后其他同学都会选定一个座位然后走进去,并且进去的方位(左边or右边)服从以下的规定:
    1.	选择途经人数最少的方向进入
              ①	②	我	③	④	⑤	⑥
	比如第二个到的同学选定了3号座位,他会选择从右边进入,我不用让位。
    2.	当两端途经的人数一样时,选择靠近自己座位的那边进入。
              ①	②	我	③	④	⑤	有人	⑥
    比如第三个到的同学选择坐3号座位,他会从左边进入,然后我要让位。
    3.	都一样时,随机选进入方位。
    现在的问题是,当我选择坐第k个座位后,我想知道在最坏的情况下,要侧身让位多少次?

输入格式

    有若干组数据,以EOF判定结束。
    每组数据第一行有两个整形n(1~ 30)和q(1~30)。分别表示座位数和查询次数。接下来一行有q个整型。k1,k2……kq,分别表示我选择坐第k个座位。数据以空格分隔。

输出格式

    每组数据一行,对于每次查询,输出一个结果,以空格分隔。

输入样例

4 4
1 2 3 4
5 5
1 2 3 4 5

输出样例

1 0 0 1
2 1 0 1 2

提示

    四个座位的时候,我选定座位①后,若第二个人选了③or④,当第三个人选②,我就要让位一次,这个是最坏的情况。
    EOF结束即是数据读入以文件结束符结束。即输入输出类似如下(当然变量名啥的不必一样,VC下按ctrl+z 然后
    回车可结束程序):
    while(scanf("%d%d",&n,&q)!=EOF)
    {
        for(i=1;i<=q;i++)
        scanf("%d",&act[i]);
        ……
        ……
        printf("%d\n",answer);
    }

来源

sleepiforest

作者

a470086609

如题主所说...水题一道,虽然标签是打着math的,但好像连规律都不需要怎么找;解这题的时候能被坑到的主要可能是一些情况没有考虑到:题目要求的是在最坏情况下,那就得想全面一点,让题中的让座次数尽可能的坏。。。╮(╯▽╰)╭

我的解法是考虑到奇数和偶数的情况。先来看偶数情况下的一组例子:

input: 10 10

1 2 3 4 5 6 7 8 9 10

output:7 6 5 4 3 3 4 5 6 7

首先从k==1开始,显而易见当你坐在最左边时如果在最右边的两个座位(9和10)填上人的话那么根据题目要求入座的人会选择途径人数最少的一边进入所以第四个人会在左边进入;因此最坏的情况就是9和10有人坐了后(这时让座次数还是0),而后的7个人从第8个位置一路坐过来(2←8)这种情况下坐k==1位置的就得让7次座 为最坏情况。   然后k==2到n/2的方法同理,且与n/2+1到n的结果是对称的。

再看看奇数情况的一组例子:

input:  11 11

1 2 3 4 5 6 7 8 9 10 11

output:8 7 6 5 4 3 4 5 6 7 8

讨论奇数时的最坏情况跟上面也是相同的但输入输出间对应的规律会有小不同;所以在上机码前在纸上多罗列几组数据,检验规律是否真确。

/* code */

#include <stdio.h>
#include <math.h>
void even(int n,int q);
void odd(int n,int q);
int main()
{
    int n,q,i;
    while(scanf("%d%d",&n,&q)!=EOF)
    {
        int a[q];
        for(i=0;i<q;i++)
            scanf("%d",&a[i]);

        if(n%2==0)
            for(i=0;i<q;i++)
                even(n,a[i]);
        else
            for(i=0;i<q;i++)
                odd(n,a[i]);
        putchar(‘\n‘);
    }
    return 0;
}
void even(int n,int q)
{
    int middle=n/2;
    if(n==2)
        {
            printf("0 ");
            return;
        }
    if(q<=middle)
        printf("%d ",n-q-2);
    else
        printf("%d ",q-3);

}
void odd(int n,int q)
{
    int middle=n/2+1;
    if(n==1)
    {
        printf("0 ");
        return;
    }
    else if(n==3)
    {
        printf("%.lf ",fabs(middle-q));
        return;
    }
    printf("%.lf ",fabs(middle-q)+middle-3);
}

  

时间: 2024-08-24 19:50:29

9503 懒人选座位的相关文章

关于Hibernate中立即加载和懒加载的区别

当1表与2表之间有OneToMany(类似)关系时候, 对于1表的实体类,设置FetchType=EAGER时(也就是立即加载),取1表数据,对应2表的数据都会跟着一起加载,优点不用进行二次查询. 缺点是严重影响数据查询时间,查询速度慢. FetchType=LAZY(也就是懒加载),此时查询时间大大缩短,缺点是查询表1的数据时,查询不到2表的数据. 不会主动取查询2表的数据.

Maven传递依懒

A依赖B,B依赖C.B是A的直接依赖,C是A的传递依赖. 1.Maven自己调解原则 先定义者优级先原则,谁先定义就用谁的传递依赖. 路径近者优级先原则,直接依赖级别高高于传递依赖. 2.排除依懒 <exclusions> <exclusion> <artifactId>spring-beans</artifactId> <groupId>org.springframework</groupId> </exclusion>

深入懒加载

[javascript] view plain copy 懒加载(LazyLoad)一直是前端的优化方案之一.它的核心思想是:当用户想看页面某个区域时,再加载该区域的数据.这在一定程度上减轻了服务器端的压力,也加快了页面的呈现速度. 懒加载多用于图片,因为它属于流量的大头.最典型的懒加载实现方案是先将需要懒加载的图片的src隐藏掉,这样图片就不会下载,然后在图片需要呈现给用户时再加上src属性. 公司内部库的懒加载正是采用这种方案.它会遍历页面中所有的图片,将其src缓存起来后删除图片的src属

页面图片懒加载

一.页面滚动加载图片的理解 当一个网页含有大量的图片的时候,往往在打开页面的加载的很慢,如现在的大型电商.新闻.微博等,如果一下加载整个网页的所有图片,那会是一个缓慢的过程,要想快速的浏览网页,我们这时候就需要用到了在滚动或滑动页面的时候加载图片的方法.即图片懒加载!!! 二.实现懒加载的思路 当打开页面的时候,刚开始不给显示图片的位置放图片,等滚动或滑动到哪里的时候在获取图片.当然如果我们不给图片src中放图片,就会出现先找不到图片的提示,这样肯定是不行的. 所以我们在放图片的位置刚开始让一张

九度oj 题目1552:座位问题

题目描述: 计算机学院的男生和女生共n个人要坐成一排玩游戏,因为计算机的女生都非常害羞,男生又很主动,所以活动的组织者要求在任何时候,一个女生的左边或者右边至少有一个女生,即每个女生均不会只与男生相邻.现在活动的组织者想知道,共有多少种可选的座位方案. 例如当n为4时,共有 女女女女, 女女女男, 男女女女, 女女男男, 男女女男, 男男女女, 男男男男7种. 输入: 输入包含多组测试用例,每组测试用例仅包含一个整数n(1<=n<=1000). 输出: 对于每组测试用例,输出一个数代表可选的方

懒加载 lazy loading

懒加载:延迟加载,当程序启动时不加载资源,当程序需要这些资源时再去加载.需要的时候再加载的一种方式,能够减少内存的占用,效率高.其本质是重写get方法. 背景:由于ios内存有限,如果我们一次性将所有资源加载完毕将极大的消耗内存,降低程序运行效率.所以就要将一些比较大的资源,如音频,数据,图片等大资源进行懒加载,就需要                                             先判断是否存在,如果不存在再创建实例化. 1 @property (nonatomic,

懒加载(延迟加载)之后,在使用数据过程中容易出现的bug

在UI中,使用懒加载,也就是延迟加载来加载数据的时候,总是会面临几个问题? 如:1. >为什么先创建NSArray属性? 2. >为什么重写NSArray的get方法? 3.>为什么要判断是否为空? 4.>为什么下方代码"//1"这里不用NSString stringWithFormat: 而"//2"这里要使用? 5.>同时"//2"这里为什么使用的是%ld 来作为占位符? 这些问题不搞懂,懒加载就很难通透,  代

懒加载的坑

先说如下东东: 比如我们申明这个鬼 @property (nonatomic, strong) NSArray *mineModelArray; 那么 _mineModelArray self.mineModelArray 这两个获取数组的原理是不一样的,(好多人都没注意这个) 第一个是就简单粗暴直接获取这个数组 第二个是调用@property的get方法获取到的,因为这个get方法返回的就是当前数组的的类型即一个数组.大多数情况下两者一样的的. 但是:如果在懒加载里面就不要再用self.min

Angular-ui-router + oclazyload + requirejs实现资源随route懒加载

本文主要说明在用AngularJS开发web应用中如何实现lazyload,使用AngularJS需要在前端实现路由功能,本文就介绍利用此点实现前端资源的懒加载. 问题 目前大部分AngularJS的应用用requirJS组织模块,但是很多都没有使用lazyload功能,在app.js中启动时将全部依赖加载进来,在模块功能较少,前端资源少的情况下没问题.那么问题来了,依赖资源过多时怎么办? build时利用grunt-contrib-requirejs提取合并文件,减少http请求,但是存在问题