正题

题目链接:https://www.luogu.com.cn/problem/P5956


题目大意

\(B\)进制下,给出序列\(a\),\(a_i\)表示数字\(i\)有多少个。求一个最大的\(X\)在\(B\)进制下,由给出的数字组成(不一定要用完),且其是\(B-1\)的倍数。

\(q\)次询问\(X\)的第\(k\)位是几。

\(2\leq B\leq 10^6,1\leq q\leq 10^5,1\leq a_i\leq 10^6,0\leq k\leq 10^{18}\)


解题思路

设\(x_i\)表示第\(i\)位的话就是

\[\left(\sum_{i=0}x_i\times B^i\right)\%(B-1)=0\Rightarrow \sum_{i=0}\left(x_i\times B^i\%(B-1)\right)=0
\]

拆开单独的一个来看

\[x_i\times B^i\%(B-1)=(\ x_i\%(B-1)\ )\times (\ B^i\%(B-1)\ )
\]
\[=x_i\%(B-1)\times 1
\]

所以其实就是各位数字的和为\(B-1\)的倍数就好了。

然后再回头看题目发现有限制\(a_i\geq 1\)。这样如果用上所有数字的和对\(B-1\)取模为\(t\)的话,若\(t\)不为\(0\),我们就让\(a_t\)减去一个\(1\)就好了。

然后对于询问求一个前缀和然后二分

时间复杂度\(O(B+q\log B)\)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=1e6+10;
ll B,q,a[N];
signed main()
{
scanf("%lld%lld",&B,&q);
ll t=0;
for(ll i=0;i<B;i++){
scanf("%lld",&a[i]);
(t+=a[i]*i)%=B-1;
}
if(t)a[t]--;
for(ll i=0;i<B;i++)a[i]+=a[i-1];
while(q--){
ll x;scanf("%lld",&x);x++;
if(x>a[B-1])puts("-1");
else printf("%lld\n",lower_bound(a,a+B,x)-a);
}
return 0;
}

P5956-[POI2017]Podzielno【数学】的更多相关文章

  1. 【BZOJ4724】[POI2017]Podzielno 数学+二分

    [BZOJ4724][POI2017]Podzielno Description B进制数,每个数字i(i=0,1,...,B-1)有a[i]个.你要用这些数字组成一个最大的B进制数X(不能有前导零, ...

  2. BZOJ4724 [POI2017]Podzielno

    4724: [POI2017]Podzielno Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 77  Solved: 37[Submit][Stat ...

  3. bzoj 4724 [POI2017]Podzielno 二分+模拟

    [POI2017]Podzielno Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 364  Solved: 160[Submit][Status][ ...

  4. BZOJ 4724: [POI2017]Podzielno

    Description 由\([0,B-1]\)的数字构造一个 \(B\) 进制数字,使得他是 \(B-1\) 的倍数. Sol 贪心+二分. 首先 \(X\) 是 \(B-1\) 的倍数,那么有 \ ...

  5. 【bzoj4724】[POI2017]Podzielno 二分

    题目描述 B进制数,每个数字i(i=0,1,...,B-1)有a[i]个.你要用这些数字组成一个最大的B进制数X(不能有前导零,不需要用完所有数字),使得X是B-1的倍数.q次询问,每次询问X在B进制 ...

  6. 数学思想:为何我们把 x²读作x平方

    要弄清楚这个问题,我们得先认识一个人.古希腊大数学家 欧多克索斯,其在整个古代仅次于阿基米德,是一位天文学家.医生.几何学家.立法家和地理学家. 为何我们把 x²读作x平方呢? 古希腊时代,越来越多的 ...

  7. 速算1/Sqrt(x)背后的数学原理

    概述 平方根倒数速算法,是用于快速计算1/Sqrt(x)的值的一种算法,在这里x需取符合IEEE 754标准格式的32位正浮点数.让我们先来看这段代码: float Q_rsqrt( float nu ...

  8. MarkDown+LaTex 数学内容编辑样例收集

    $\color{green}{MarkDown+LaTex 数学内容编辑样例收集}$ 1.大小标题的居中,大小,颜色 [例1] $\color{Blue}{一元二次方程根的分布}$ $\color{R ...

  9. BZOJ 4726: [POI2017]Sabota?

    4726: [POI2017]Sabota? Time Limit: 20 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 301  Solved ...

随机推荐

  1. SpringBoot监听redis订阅监听和发布订阅

    前言 我们可以在redis中发布一条订阅到通道中,所有监听了这个通道的都可以收到这个发布的内容! redis订阅监听配置类 代码如下: RedisListenerConfig.java package ...

  2. transient用法

    1 import java.io.FileInputStream; 2 import java.io.FileNotFoundException; 3 import java.io.FileOutpu ...

  3. BeanUtils使用:从一个map集合中,拷贝到javaBean中(四)

    package beanutil; import java.lang.reflect.InvocationTargetException; import java.util.HashMap; impo ...

  4. ProjectEuler 009题

    题目: A Pythagorean triplet is a set of three natural numbers, a b c, for which, a2 + b2 = c2 For exam ...

  5. 微信小程序学习笔记五 常见组件

    1. 常见组件 重点讲解小程序中常用的布局组件 1.1 view 代替 原来的div标签 <!-- pages/index/index.wxml --> <view hover-cl ...

  6. 温故知新:老铁,WeakReference了解一下?

    本文供稿--大师兄 弱引用是个什么鬼?大白话说就是不那么强的引用(哈哈,纯属玩笑,实际可不是这样滴),那强引用又是个什么鬼?他们有什么用处?问题有点迷,君阅完这篇文章后或许你心中就有答案了-- 什么是 ...

  7. DDL和客户端ip监控

    DDL触发器监控脚本部署步骤 以下操作请使用sys用户: --第一步:创建表(此表主要保存ddl触发器产生的信息),可以根据不同的业务,使用相关的监控用户,在此监控用户为c##upctest 从可维护 ...

  8. blender Text on Curve Text on Sphere

    Text on Curve Shift + A 添加一个 BezierCurve Shift + A 添加一个 Text,Tab 编辑,再次 Tab 退回 Object Mode 选中 Text,Ad ...

  9. [编译] 10、kconfig 入门指导教程

    目录 前言 1. 安装 kconfig 2. 克隆一个 demo 3. 运行 kconfig 4. 源码解析 4.1 选择题目设计模板 4.2 填空题目设计模板 4.3 判断题目设计模板 5. 产物解 ...

  10. 20210809 Merchant,Equation,Rectangle

    做过,但当时咕了 T3 Merchant 先特判 \(t=0\),之后斜率一定会起作用. 考虑最终选择的物品集合,它们的斜率和一定大于 \(0\),因此答案具有单调性,可以二分. 实现的时候注意细节 ...