• [数论]Podzielno


    题目描述

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

    输入

    第一行包含两个正整数B(2<=B<=10^6),q(1<=q<=10^5)。
    第二行包含B个正整数a[0],a[1],a[2],...,a[B-1](1<=a[i]<=10^6)。
    接下来q行,每行一个整数k(0<=k<=10^18),表示一个询问。

    输出

    输出q行,每行一个整数,依次回答每个询问,如果那一位不存在,请输出-1。

    样例输入

    3 3
    1 1 1
    0
    1
    2
    

    样例输出

    0
    2
    -1

    思路:结论:一个数能被B-1整除的充要条件是该数在B进制下的各个位值之和能被B-1整除
    AC代码:
    #include <iostream>
    #include<cstdio>
    typedef long long ll;
    using namespace std;
    
    ll a[1000005],s[1000005];
    
    int main()
    {
        ll B,q;scanf("%lld%lld",&B,&q);
        ll sum=0;
        for(ll i=0;i<=B-1;i++) {scanf("%lld",&a[i]);sum+=i*a[i];}
        if(sum%(B-1)!=0) {a[sum%(B-1)]--;sum--;}
        s[0]=a[0];
        for(ll i=1;i<=B-1;i++) s[i]=s[i-1]+a[i];
        while(q--){
            ll k;scanf("%lld",&k);k++;
            ll pos=lower_bound(s,s+B,k)-s;
            if(pos==B) printf("-1
    ");
            else printf("%lld
    ",pos);
        }
        return 0;
    }
     
    转载请注明出处:https://www.cnblogs.com/lllxq/
  • 相关阅读:
    PaoptMap
    NES游戏常用汇编指令
    JS_XMLHttpRequest
    Function Evaluation
    exists的用法
    我的博客园博客开通咯(qyl)
    数据库访问类(Sql)
    Show一下自己的编程工具
    Ajax.net使用初体验
    WEB打印代码大全(NEW!!)
  • 原文地址:https://www.cnblogs.com/lllxq/p/10092169.html
Copyright © 2020-2023  润新知