博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces Beta Round #10 B. Cinema Cashier (树状数组)
阅读量:4449 次
发布时间:2019-06-07

本文共 1622 字,大约阅读时间需要 5 分钟。

题目大意:

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

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

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

#include 
#include
#include
#include
#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

转载于:https://www.cnblogs.com/yxwkf/p/4008035.html

你可能感兴趣的文章
1.基础数据类型的初识 字符串 bool 整型 if else elif
查看>>
【设计模式】4、原型模式
查看>>
进入meta模式关闭背光灯
查看>>
轻松实现Ecshop商城多语言切换
查看>>
webstorm上svn的安装使用
查看>>
【JEECG技术文档】数据权限自定义SQL表达式用法说明
查看>>
使用 Bootstrap Typeahead 组件
查看>>
第一次玩蛇,有点紧张。
查看>>
EF不能很好的支持DDD?估计是我们搞错了!
查看>>
ubuntu下基于sqlite3后台的php环境的搭建
查看>>
Qt 静态库与共享库(动态库)共享配置的一个小办法
查看>>
linux_cacti 配置之 安装snmp 服务
查看>>
201407-至今
查看>>
c# 应用事务
查看>>
优化杭州某著名电子商务网站高并发千万级大型数据库经验之- SQL语句优化(转)...
查看>>
DtCms.Model.Article.cs
查看>>
WPF——TargetNullValue(如何在绑定空值显示默认字符)
查看>>
Linux之crontab
查看>>
清除浮动
查看>>
JAVA优化建议
查看>>