首页 > 其他分享 >2018ACM浙江省赛 ZOJ 4029 Now Loading!!!(二分)

2018ACM浙江省赛 ZOJ 4029 Now Loading!!!(二分)

时间:2023-05-29 11:31:37浏览次数:49  
标签:Loading int res ZOJ mid 2018ACM ans ll mod



Now Loading!!!


Time Limit: 1 Second       Memory Limit: 131072 KB


DreamGrid has  integers . DreamGrid also has 



for a given number 

, where  ,  .

Input

There are multiple test cases. The first line of input is an integer 

The first line contains two integers  and  () -- the number of integers and the number of queries.

The second line contains  integers  ().

The third line contains  integers  ().

It is guaranteed that neither the sum of all  nor the sum of all  exceeds .

Output

For each test case, output an integer , where  is the answer for the -th query.

Sample Input


2 3 2 100 1000 10000 100 10 4 5 2323 223 12312 3 1232 324 2 3 5


Sample Output


11366 45619



Author:  LIN, Xi


Source: 

The 15th Zhejiang Provincial Collegiate Programming Contest Sponsored by TuSimple



Submit    

Status


【题意】

对于每一次询问,求上式的值

【分析】

把a排序

由于分母的范围很小 [2,30],可以枚举;

对于每一次询问p,枚举分母 i 时,可以找出a中分母等于 i 的那一段,预处理前缀和,用于此时直接加。

复杂度n * log * log

【代码】

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e6+5;
const int INF=0x3f3f3f3f;
const int mod=1e9;

int n,m;
int a[500010],p;
int sum[32][500010];
ll qpow(ll n,ll m)
{
    ll ans=1;
    while(m){
        if(m&1)ans*=n;
        n*=n;
        m>>=1;
        if(ans>20001001000)return -1;
    }
    return ans;
}
int main()
{
    int T;cin>>T;
    while(T--)
    {
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++)scanf("%d",&a[i]);
        sort(a+1,a+1+n);
        for(int i=1;i<=31;i++) //pre sum of a/log
        {
            sum[i][0]=0;
            for(int j=1;j<=n;j++)
                sum[i][j]=(sum[i][j-1]+a[j]/i)%mod;
        }
        ll ans=0;
        for(int k=1;k<=m;k++)
        {
            scanf("%d",&p);
            ll res=0;
            for(int i=1;i<=31;i++) //log p ai
            {
                ll down=qpow(p,i-1); //> it
                ll up=qpow(p,i); // <=it
                if(down==-1)break;

                int l=1,r=n+1,mid;
                if(down!=-1)
                    while(l<r){
                        mid=(l+r)>>1;
                        if(a[mid]>down)r=mid;
                        else l=mid+1;
                    }
                int L=r;

                l=1,r=n+1;
                if(up!=-1)
                    while(l<r){
                        mid=(l+r)>>1;
                        if(a[mid]>up)r=mid;
                        else l=mid+1;
                    }
                int R=r-1;
                if(L>n)break;
                if(L>R)continue;

                res=(res+sum[i][R]-sum[i][L-1])%mod;
                res=(res+mod)%mod;
            }
            ans=(ans+res*k%mod)%mod;
        }
        printf("%lld\n",ans);
    }
}


标签:Loading,int,res,ZOJ,mid,2018ACM,ans,ll,mod
From: https://blog.51cto.com/u_16125110/6369265

相关文章

  • React 全局Loading
    import{Spin}from'antd'importReactDOMfrom'react-dom/client'importtype{SpinProps}from'antd'classLoading{privatecontainer=document.createElement('div')privateroot=ReactDOM.createRoot(this.co......
  • ZOJ 4020 Traffic Light(走迷宫变形)
    传送门我感觉就是一个走迷宫的题,只不过这个的墙是变化的。但是因为一直在0-1之间转换,所以把走到当前位置的步数进行判断,如果是奇数就把当前位置的灯状态改变,偶数不用处理,然后就是基本的搜索了。#include<bits/stdc++.h>usingnamespacestd;constintmaxn=1e5+10;vector<int>......
  • ZOJ 3960 What Kind of Friends Are You?(模拟)
    传送门给你几个人,然后下i行对应的是回答出来第i个问题的人,最后询问回答出来了哪几个问题的是谁。用一个map,存名字和数字,回答出的问题编号也转化为2进制,然后转化为10进制,这样的话每个人回答出的问题就对应的是一个数字,询问的时候也把2进制的串转化为10进制,这样的话比对就比较方便。......
  • ZOJ 3961 Let's Chat
    传送门给你A的区间和B的区间,然后问你重合的区间。答案就是求重合的区间长度-m+1的值。因为数据量不大,所以就让A的每个区间都对B的区间进行匹配,然后求和就可以了。这就是一种暴力。#include<bits/stdc++.h>usingnamespacestd;constintmaxn=150;typedefpair<int,int>pq;p......
  • ZOJ 3958 Cooking Competition
    传送门也没什么好说的,就根据题意说的写就完事儿了。#include<bits/stdc++.h>usingnamespacestd;intmain(){//freopen("in.txt","r",stdin);cin.tie(0);cout.tie(0);intt,ko,to;cin>>t;while(t--){intn;......
  • ZOJ 3959 Problem Preparation
    传送门根据题目描述写,对于每组给定的数据判断是否满足四个要求就可以了。#include<bits/stdc++.h>usingnamespacestd;intx[120];intmain(){//freopen("in.txt","r",stdin);cin.tie(0);cout.tie(0);intt;cin>>t;while(t--){......
  • 记录--axios和loading不得不说的故事
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助loading的展示和取消可以说是每个前端对接口的时候都要关心的一个问题。这篇文章将要帮你解决的就是如何结合axios更加简洁的处理loading展示与取消的逻辑。首先在我们平时处理业务的时候loading一般分为三种:按钮l......
  • [BZOJ4407]于神之怒加强版 CODE
    #include<bits/stdc++.h>#definelllonglong#defineFor(i,a,b)for(lli=(a);i<=(b);++i)#defineRep(i,a,b)for(lli=(a);i>=(b);--i)constllN=1e6+10;usingnamespacestd;constllmod=1e9+7;llvis[N],tot,p[N];voidinit(lln){//质数筛For......
  • 【BZOJ2007】【NOI2010】海拔(对偶图,最短路)
    DescriptionYT市是一个规划良好的城市,城市被东西向和南北向的主干道划分为n×n个区域。简单起见,可以将YT市看作一个正方形,每一个区域也可看作一个正方形。从而,YT城市中包括(n+1)×(n+1)个交叉路口和2n×(n+1)条双向道路(简称道路),每条双向道路连接主干道上两个相邻的交叉路口。下图为......
  • 【BZOJ4241】【回滚莫队模板题】历史研究
    Description给定一个序列,每次询问区间[l,r][l,r]内,所有权值与其出现次数的乘积的最大值。Solution回滚莫队模板题。将询问以左端点所在块为第一关键字,右端点为第......