Codeforces Beta Round #10 B. Cinema Cashier (树状数组)

Codeforces Beta Round #10 B. Cinema Cashier (树状数组)

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

题目大意:

n波人去k*k的电影院看电影。

要尽量往中间坐,往前坐。

直接枚举,贪心,能坐就坐,坐在离中心近期的地方。

#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#define maxn 1000005
#define lowbit(x) (x&(-x))

using namespace std;

struct BIT
{
    int sum;
    void init(){sum=0;}
}bit[105][105];
int q,n;
int Sum(int row,int x)
{
    int ret=0;
    for(int i=x;i>=1;i-=lowbit(i))
        ret+=bit[row][i].sum;
    return ret;
}
int query(int row,int l,int r)
{
    return Sum(row,r)-Sum(row,l-1);
}
void update(int row,int x)
{
    for(int i=x;i<=n;i+=lowbit(i))
        bit[row][i].sum++;
}
int cal(int s,int e)
{
    return (s+e)*(e-s+1)/2;
}
int main()
{
    scanf("%d%d",&q,&n);
    int cen=n/2+1;

    for(int i=0;i<=n;i++)
        for(int j=0;j<=n;j++)
        {
            bit[i][j].init();
        }
    for(int i=1;i<=q;i++)
    {
        int num;
        scanf("%d",&num);
        int ansr=-1,ansc=-1;
        int min_val=0x3f3f3f3f;

        for(int r=1;r<=n;r++)
        {
            for(int c=1;c+num-1<=n;c++)
            {
                if(query(r,c,c+num-1)==0)
                {
                    int tmp;
                    if(c>=cen)
                    {
                        tmp=cal(c,c+num-1)-cen*num+abs(r-cen)*num;
                    }
                    else if(c+num-1<=cen)
                    {
                        tmp=cen*num-cal(c,c+num-1)+abs(r-cen)*num;
                    }
                    else
                    {
                        tmp=abs(r-cen)*num+cal(cen,c+num-1)-(c+num-cen)*cen+cen*(cen-c)-cal(c,cen-1);
                    }
                    if(tmp<min_val)
                    {
                        min_val=tmp;
                        ansr=r;
                        ansc=c;
                    }
                }
            }
        }
        if(min_val!=0x3f3f3f3f)
        {
            printf("%d %d %d\n",ansr,ansc,ansc+num-1);
                for(int j=ansc;j<=ansc+num-1;j++)
                    update(ansr,j);
        }
        else puts("-1");
    }
    return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/118389.html原文链接:https://javaforall.net

(0)
上一篇 2021年12月6日 下午9:00
下一篇 2021年12月6日 下午9:00


相关推荐

  • 【JavaScript】document对象_Cookie属性「建议收藏」

    【JavaScript】document对象_Cookie属性「建议收藏」Cookie是什么?借助document的cookie属性,Javascript程序就可以实现与www服务器一样的cookie功能,即获取当前的cookie信息和产生一个新的cookie。一个浏览器访问www服务器的每个网页文件,都是独立的,每个网页的javascript程序之间的信息也不能共享。即使是同一个网页的上一次访问和下一次访问之间也无法传递数据。同一张网页

    2022年7月27日
    11
  • vue路由懒加载的实现方式_vue-router路由模式

    vue路由懒加载的实现方式_vue-router路由模式本文已参与「新人创作礼」活动,一起开启掘金创作之路1.路由懒加载如何实现当打包构建应用时,JavaScript包会变得非常大,影响页面加载。如果我们能把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件,这样就会更加高效当前,我们使用如下方式导入组件importLoginfrom’../views/Login打包后,这些组件都会被打包到一个.s文件中,css代码会打包到css文件中访问应用时,就会下载这js文件和对应的css文件随着代码的增多,文件

    2022年10月7日
    4
  • java开发官方资源下载网址大全(持续更新)「建议收藏」

    java开发官方资源下载网址大全(持续更新)「建议收藏」1、下载mysql数据库驱动包网址:https://downloads.mysql.com/archives/c-j/

    2022年7月7日
    63
  • 秒杀系统设计的 5 个要点:前端三板斧+后端两条路!(建议收藏)

    点击上方“全栈程序员社区”,星标公众号 重磅干货,第一时间送达 秒杀系统涉及到的知识点: 高并发,cache,锁机制 基于缓存架构redis,Memcached的先进先出队列。 稍…

    2021年6月23日
    112
  • java利用TOTP算法动态生成一次性密码

    java利用TOTP算法动态生成一次性密码一 HOTP HOTP 算法 全称是 AnHMAC BasedOne TimePassword 是一种基于事件计数的一次性密码生成算法 详细的算法介绍可以查看 RFC4226 其实算法本身非常简单 算法本身可以用两条简短的表达式描述 HOTP K C Truncate HMAC SHA 1 K C PWD K C digit HOTP K

    2026年3月19日
    3
  • RowBounds分页_bootstrap 分页

    RowBounds分页_bootstrap 分页只要给接口增加一个RowBounds传输就可以了。//下面测试MyBatis自带的分页类RowBounds功能publicList&lt;Role&gt;findByRowBounds(@Param("roleName")Stringrolename,@Param("note")Stringnote,RowBoundsrowBounds);而映射文件不需要任何…

    2026年2月15日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号