zoukankan      html  css  js  c++  java
  • cogs 1695. 梦游仙境

    ★☆   输入文件:XTTMYXJ.in   输出文件:XTTMYXJ.out   简单对比

    时间限制:5 s   内存限制:512 MB

    【题目描述】

    在Asm.def仍然在与人工智能进行艰苦的斗争时,雪甜甜小公主仍然在亚特兰蒂斯里自娱自乐,她不小心误闯了玛丽奥的世界。

    她感觉十分有趣,她闯关到了一行有n个小块上面有傻币的地面(可以看成一个数轴),地面上有许多,假如雪甜甜的起点为l,终点为r,跳跃能力为jump,从左往右跳

    针对雪甜甜皇家公主给出的q组询问l,r,jump,你需要计算他获得的傻币数

    例如下面这种情况

    地面的金币数列:

    2    1    4    7    4    1    2    5    1

    w[1] w[2] w[3] w[4] w[5] w[6] w[7] w[8] w[9]

    若l=2,r=7,jump=3,则总傻币数为w[2]+w[5]=5(w[8]不算,因为雪甜甜跳不到)

    若l=3,r=4,jump=2,则总傻币数为w[3]=4(没法跳,只能留在原地)

    【输入格式】


    第一行为两个整数n,q

    第二行n个数,表示w[i]

    接下来q行每行三个数l,r,jump

    【输出格式】

    总共q行,每行一个答案ans

    【样例输入】

    10 5
    2 1 4 7 4 8 3 6 4 7
    1 10 233333
    4 7 666666
    2 10 2
    1 9 4
    3 5 3

    【样例输出】

    2 7 29 10 4

    【提示】

    对于30%的数据,n<=2000

    对于100%的数据,n<=100000,q<=500000

    暴力40:

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    
    using namespace std;
    const int N=100010;
    
    int n,m;
    int a[N];
    
    inline int read()
    {
    	int x=0;int f=1;char c=getchar();
    	while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
    	while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar();
    	return x*f;
    }
    int main()
    {
    	freopen("XTTMYXJ.in","r",stdin);
    	freopen("XTTMYXJ.out","w",stdout); 
    	n=read();m=read();
    	for(int i=1;i<=n;i++)
    		a[i]=read();
    	for(int i=1;i<=m;i++)
    	{
    		int start=read(),endd=read(),jump=read();
    		long long answer=0;
    		for(int i=start;i<=min(n,endd);i+=jump)
    			answer+=a[i];
    		printf("%lld
    ",answer);
    	}
    	
    	return 0;
    }
    

      分块+乱搞=AC:

    #include <iostream>
    #include <cstdlib>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    
    using namespace std;
    #define ll long long
    
    inline int read()
    {
    	int x=0;int f=1;char c=getchar();
    	while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
    	while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar();
    	return x*f;
    }
    
    const ll maxn=101000;
    
    ll n,m,size;
    ll block[maxn],c[maxn],sum[400][maxn];
    
    ll query_1(ll l,ll r,ll jump)
    {
    	ll ans=0;
    	for(ll i=l;i<=r;i+=jump) ans+=c[i];
    	return ans;
    }
    
    ll query_2(ll l,ll r,ll jump)
    {
    	r=r-((r-l)%jump);
    	if(r<=l) return c[l];
    	return sum[jump][l]-sum[jump][r+jump];
    }
    
    int main()
    {
    	freopen("XTTMYXJ.in","r",stdin);
    	freopen("XTTMYXJ.out","w",stdout);
    	
    	n=read(),m=read(),size=sqrt(n);
    	
    	for(ll i=1;i<=n;i++) block[i]=(i-1)/size+1;
    	for(ll i=1;i<=n;i++) c[i]=read();
    	
    	for(ll i=1;i<=size;i++)
    		for(ll j=n;j>=1;j--)
    			sum[i][j]=sum[i][j+i]+c[j];
    			
    	for(ll i=1;i<=m;i++)
    	{
    		ll l=read(),r=read(),jump=read();
    		if(jump==0) printf("%lld
    ",c[l]);
    		else if(jump>size) printf("%lld
    ",query_1(l,r,jump));//1步大于块数 
    		else printf("%lld
    ",query_2(l,r,jump));//一步小于块数 
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    w3cscholl的在线代码编辑工具2
    w3cscholl的在线代码编辑工具
    关于 stl的内存分配的深浅拷贝
    色彩模式与色彩空间
    mediacoder固定质量CRF
    集合加泛型的类型转换
    JQuery事件绑定bind、live、on、trigger
    JS构造函数中有return
    SSA与ASS字幕
    同步、异步、阻塞、非阻塞区别与联系
  • 原文地址:https://www.cnblogs.com/lyqlyq/p/7214252.html
Copyright © 2011-2022 走看看