题意 :
给你0 ~ B-1每个数的个数a[i],让你组成一个最大的B进制数 X 使X mod B-1 = 0 ,q个询问每次询问X的第k位数是什么。
--------------------------------------此后一千里--------------------------------------------------------
可以很简单观察出满足条件的X各位和一定是B-1的倍数。简单证明 : 设 (X = x0+x1*B+x2*B^2+...+xn*B^n) mod B-1 = 0
即 (x0 % p + x1*B % p + x2*B^2 % p +.....) % p = 0 ,因为B % B-1 = 1,所以 x0 + x1 + x2 + ... + xn % p = 0
因为题目条件a[i] > 0 所以我们总可以有 sigma(a[i])- 1 个 数的合法解,显然这个解是最优解。询问就直接二分一下回答。
代码 :
#include#define LL long longusing namespace std;inline int Max(int a,int b) { return a>b?a:b;}inline int Min(int a,int b) { return a 0?a:-a;}inline int Sqr(int a) { return a*a;}#define MAXN 1000006int B,q;LL a[MAXN],sum,b[MAXN],k,all;int BS(LL k) { int l=0,r=B-1,mid,ret; while(l<=r) { mid=l+r>>1; if(b[mid]>=k) r=mid-1,ret=mid; else l=mid+1; } return ret;}int main() { scanf("%d%d",&B,&q); for(int i=0;i all) puts("-1"); else printf("%d\n",BS(k)); } return 0;}