• 【CF103D】Time to Raid Cowavans [根号算法]


    CF103D Time to Raid Cowavans

    一个序列(a)(m)次询问,每次询问给出(t,k),求(a_t+a_{t+k}+a_{t+2k}+...+a_{t+pk},t+(p+1)k>n)

    步长(kgesqrt n)时暴力枚举 (k<sqrt n)时预处理出来部分和(O(nsqrt n))

    但是这样会MLE 所以用一个(sum)数组 将询问离线询问 (<sqrt n)(k)不会超过(sqrt n)个 所以复杂度不会超过(nsqrt n)

    (sum_i)表示在当前步长(k)下从(n)倒着跳回(i)的和

    这题不能完全说不是“数据结构“,但它体现的是一种和数据结构题中的根号截然不同的思想 对于题目中的某两个约束 它们是互相制约的,并且这种制约是”乘积“关系——步长和项数,总有一个不能太大 而我们针对两个情况分别设计算法,然后将两种算法组合起来,就能获得一个完整的解决问题的算法

    struct que{int t,k,id;}q[M];
    bool cmp(que x,que y){return x.k==y.k?x.t>y.t:x.k<y.k;}
    
    int main(){
    #ifndef ONLINE_JUDGE
        freopen("in.txt","r",stdin);
    #endif
    	rd(n),blo=floor(sqrt(n));
    	for(int i=1;i<=n;++i) rd(a[i]);
    	rd(m);
    	for(int i=1;i<=m;++i) rd(q[i].t),rd(q[i].k),q[i].id=i;
    	sort(q+1,q+m+1,cmp);
    	for(int i=1,las=n;i<=m;++i){
    		ll ret=0;
    		if(q[i].k>=blo)
    			for(int j=q[i].t;j<=n;j+=q[i].k) ret+=a[j];
    		else{
    			if(q[i].k!=q[i-1].k) las=n;
    			for(int j=las;j>=q[i].t;--j){
    				sum[j]=a[j];
    				if(j+q[i].k<=n) sum[j]+=sum[j+q[i].k];
    			}
    			las=q[i].t-1,ret=sum[q[i].t];
    		}
    		ans[q[i].id]=ret;
    	}
    	for(int i=1;i<=m;++i) printf("%lld
    ",ans[i]);
        return 0;
    }
    

    P3396 哈希冲突

    这道题同理 这题可以预处理粗来

    int n,m,blo,a[N];
    ll sum[400][400];
    int main(){
    #ifndef ONLINE_JUDGE
        freopen("in.txt","r",stdin);
    #endif
    	rd(n),rd(m),blo=floor(sqrt(n));
    	for(int i=1;i<=n;++i) rd(a[i]);
    	for(int i=1;i<=n;++i)
    		for(int j=1;j<blo;++j) sum[j][i%j]+=a[i];
    	char opt;ll ret;
    	for(int i=1,x,y;i<=m;++i){
    		scanf("
    %c%d%d",&opt,&x,&y),ret=0;
    		if(opt=='A'){
    			if(x>=blo)
    				for(int j=y%x;j<=n;j+=x) ret+=a[j];
    			else ret=sum[x][y%x];
    			printf("%lld
    ",ret);
    		}
    		else{
    			for(int j=1;j<blo;++j) sum[j][x%j]+=y-a[x];
    			a[x]=y;
    		}
    	}
        return 0;
    }
    
  • 相关阅读:
    Java方法
    Java程序控制
    Java基础语法
    编程语言的两大类型
    IntelliJ IDEA优化配置
    Hello World
    Java安装及卸载
    Java来龙去脉
    计算机底层基础
    Day14
  • 原文地址:https://www.cnblogs.com/lxyyyy/p/11777795.html
Copyright © 2020-2023  润新知