[loj3367]装饼干
先考虑如何判定一个$y$是否可行——从高位开始,记录这一位所需要的$2^{i}$数量$t$,若$y$的这一位为1,则$t+=x$,之后分两类讨论:1.$t\le a_{i}$,令$t=0$;2.$b>a_{i}$,令$t=2(t-a_{i})$,记比较之前的$t$为$b_{i}$,最终,我们需要让$b_{0}\le a_{0}$
考虑dp,设$f[i]$表示仅考虑$y$的第$[i,k)$位,且满足$b_{i}\le a_{i}$的$y$的数量,那么答案即为$f[0]$
枚举$j$表示上一个满足$b_{j}\le a_{j}$的位置,那么要满足$\forall j<k< i,b_{j}>a_{j}$且$b_{i}\le a_{i}$
假设$y$的第$j-1$到$i$位依次为$p_{i},...,p_{j-1}$,则有$b_{k}=\sum_{l=k}^{j-1}xp_{l}\cdot 2^{l-k}-\sum_{l=k+1}^{j-1}a_{l}\cdot 2^{l-k}$,由于后者为常数,不妨记为$C_{k}$,则要求$\forall j<k<i,\sum_{l=k}^{j-1}xp_{l}\cdot 2^{l-k}> \frac{C_{k}+a_{k}}{x}$且$\sum_{l=i}^{j-1}xp_{l}\cdot 2^{l-i}\le \frac{C_{i}+a_{i}}{x}$
对于第一个条件,$\sum_{l=i}^{j-1}p_{l}\cdot 2^{l-i}$越大越容易实现,因此可以给出这个值的下限,第二个条件又给出了上限,上限-下限+1即为答案
有两个细节问题:1.$y$的位数不一定为$k$,因此要补0到60位;2.上限要对$2^{j-i}-1$取$min$,若下限>上限则不可能出现这种情况,即对0取max
这样暴力计算时间复杂度为$o(qk^{3})$,发现$C_{k}$与$i$无关,因此可以优化到$o(qk^{2})$

1 #include "biscuits.h"
2 #include<bits/stdc++.h>
3 using namespace std;
4 #define ll long long
5 int n;
6 ll f[105];
7 ll count_tastiness(ll x,vector<ll>a){
8 while (a.size()<60)a.push_back(0);
9 n=60;
10 memset(f,0,sizeof(f));
11 f[n]=1;
12 for(int i=n-1;i>=0;i--)
13 for(int j=i+1;j<=n;j++){
14 ll mn=0,mx=0;
15 for(int k=j-1;k>=i;k--){
16 mx=mx*2+a[k];
17 if (k>i)mn=max(mn,((mx/x+1)<<(k-i)));
18 }
19 f[i]+=f[j]*max(min(mx/x,(1LL<<j-i)-1)-mn+1,0LL);
20 }
21 return f[0];
22 }
[loj3367]装饼干的更多相关文章
- 程序员装B指南
一.准备工作 "工欲善其事必先利其器." 1.电脑不一定要配置高,但是双屏是必须的,越大越好,能一个横屏一个竖屏更好.一个用来查资料,一个用来写代码.总之要显得信息量很大,效率很高 ...
- LinuxMint装JDK和Eclipse
Linux Mint 装JDK和Eclipse 前言 在尝试了好几个发行版后终于锁定了Linux Mint Cinnamon .那么就得配置好环境了. 这里讲一下JAVA环境,配置JDK和Eclips ...
- VS2015安装之后加装SQL SERVER2014的步骤
网上一直说的是先安装SQL Server 2014,再安装VS2015,软件就不会出现问题.我这次在什么都没准备的情况下安装了VS2015,安装之后发觉VS2015自带的SQL2014只有连接服务器和 ...
- ubuntu 14.04 desktop装vnc4server
ubuntu 14.04 desktop上安装vnc4server要装上gnome的一些软件包并修改启动文件~/.vnc/xstartup 问题来源How to make VNC Server wor ...
- [LeetCode] Container With Most Water 装最多水的容器
Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). ...
- 如何装最多的水? — leetcode 11. Container With Most Water
炎炎夏日,还是呆在空调房里切切题吧. Container With Most Water,题意其实有点噱头,简化下就是,给一个数组,恩,就叫 height 吧,从中任选两项 i 和 j(i <= ...
- 装X代码
装X代码 http://hackcode.ishoulu.com/scp/ http://hackcode.ishoulu.com/umbrella/ http://hackcode.ishoulu. ...
- Dell R730 配置完RAID后装系统找不到硬盘。
1. 各硬盘只是灯都正常.硬件无故障. 2. 8个600G硬盘做的RAID0和RAID5后都在装系统选盘处找不到硬盘.(注意: 第一次做raid 时,没有进行初始化init.后补做也无效,一直复现这个 ...
- acm的ubuntu (ubuntu16.04 安装指南,chrome安装,vim配置,git设置和github,装QQ)
日常手贱把ubuntu14.04更新到了16.04,然后就game over了.mdzz,不然泥萌也看不到这篇博客了=.= 然后花了些时间重装了一个16.04版的,原来那个14.04的用可以用,就是动 ...
随机推荐
- Django序列化页和过滤页规范
序列化类:serializers.py from rest_framework import serializers from goods.models import Goods, GoodsCate ...
- 成功在Caterpillar代码中插入事件对象-20200917
首先搞清楚了Caterpillar的solidity代码生成机制.Caterpillar分为Caterpillar Core和 executepanel两部分. executePanel是UI前端,用 ...
- UltraSoft Scrum Meeting 博客汇总
一.Alpha阶段 UltraSoft - Alpha - Scrum Meeting 1 UltraSoft - Alpha - Scrum Meeting 2 UltraSoft - Alpha ...
- Alpha阶段发布声明
发布声明 Alpha 1.Alpha版本功能说明 功能列表和详情图 模块 功能 展示 首页 查看首页博文,搜索博文,可供未登录用户使用 动态 查看推荐动态给未登录用户使用,登录用户可以查看关注动态.我 ...
- spring cloud中使用hystrix实现回退
在微服务架构中,我们的服务被拆分成多个微服务,每个微服务完成自己的职责,微服务之间通过rpc或http进行调用.这个时候我们就要确保我们的服务高可用,但谁也说不准我们的服务能永远快速的提供服务.假如现 ...
- jdk8下载与安装教程
jdk8下载与安装教程下载有两种方式 一.网盘下载网盘下载链接 pan.baidu.com/s/1VQAwHS6WDjemDnKDnPIvww 提取码:f5tv二.官网下载如果想自己一步步研究亲自实 ...
- analysis_screencap
#!/usr/bin/env pythonfrom PIL import Imageimg = Image.open("./screen.png")maps = [[] for i ...
- dotnet OpenXML 转换 PathFillModeValues 为颜色特效
在 OpenXml 预设形状,有一些形状设置了 PathFillModeValues 枚举,此枚举提供了亮暗的蒙层特效.具体的特效是让形状选择一个画刷,在画刷上加上特效.如立体几何 Cube 形状,在 ...
- 攻防世界 Misc 新手练习区 give_you_flag Writeup
攻防世界 Misc 新手练习区 give_you_flag Writeup 题目介绍 题目考点 gif图片分离 细心的P图 二维码解码 Writeup 下载附件打开,发现是一张gif图片,打开看了一下 ...
- (原创)WinForm中莫名其妙的小BUG——ComboBox 尺寸高度问题
一.前言 使用WinForm很久了,多多少少遇到一些小BUG. 这些小BUG影响并不严重,而且只要稍微设置一下就能正常使用,所以微软也一直没有修复这些小BUG. 本来并不足以写篇文章去记录,但是昨天遇 ...