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\n",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\n",c[l]);
		else if(jump>size) printf("%lld\n",query_1(l,r,jump));//1步大于块数
		else printf("%lld\n",query_2(l,r,jump));//一步小于块数
	}
	return 0;
}

  

时间: 2024-10-12 20:36:34

cogs 1695. 梦游仙境的相关文章

E - 娜娜梦游仙境系列——莫名其妙的插曲

E - 娜娜梦游仙境系列——莫名其妙的插曲 E - 娜娜梦游仙境系列——莫名其妙的插曲 Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Others) Problem Description 娜 娜因为帮桃花村民们解决了一大难题而受到村民们的尊敬,不过由于娜娜还想继续探索这个神奇的世界,只好恋恋不舍地与村民告别.当娜娜离开村庄的一刻,娜娜 失忆了!她不记得桃花村的一切,她不记得之前吃了很多糖果

G - 娜娜梦游仙境系列——梦醒

G - 娜娜梦游仙境系列——梦醒 Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Others)     Special Judge Submit Status Problem Description 娜娜离开了这个王国,走向远方,在旷野上,娜娜看到了一个大时钟,上面的时针分针秒针都在缓缓转动,那只挥着翅膀的天使又出现了,天使说:“外面天已经亮了,娜娜你别睡过头哟~”,娜娜问:“我怎样才能醒过

D - 娜娜梦游仙境系列——村民的怪癖

D - 娜娜梦游仙境系列——村民的怪癖 Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Others) Submit Status Problem Description 娜娜费劲九牛二虎之力终于把糖果吃完了(说好的吃不完呢?骗人,口亨~),于是,缘溪行,忘路之远近.忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷,娜娜甚异之.复前行,欲穷其林.林尽水源,便得一山,山有小口,仿佛若有光.便

F - 娜娜梦游仙境系列——多民族王国

F - 娜娜梦游仙境系列——多民族王国 Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Others) Submit Status Problem Description 娜娜好不容易才回忆起自己是娜娜而不是什么Alice,也回忆起了自己要继续探索这个世界的目标,便偷偷溜出皇宫.娜娜发现这个王国有很多个民族组成,每个民族都有自己的方言,更要命的是这些方面差别还很远,这就导致这个王国的人民交流十

C - 娜娜梦游仙境系列——吃不完的糖果

C - 娜娜梦游仙境系列——吃不完的糖果 Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Others) Submit Status Problem Description 娜娜好不容易才在你的帮助下"跳"过了这个湖,果然车到山前必有路,大战之后必有回复,大难不死,必有后福!现在在娜娜面前的就是好多好多的糖果还有一些黑不溜秋的东西!不过娜娜眼中只有吃不完的糖果!娜娜高兴地快要蹦起来了

A - 娜娜梦游仙境系列——诡异的钢琴

A - 娜娜梦游仙境系列——诡异的钢琴 Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Others) Submit Status Problem Description 从前,有一个ACdream王国,王国里住着一位公主,她叫娜娜,娜娜公主有一天做了一个很长很长的梦~她说她从来没有遇到过这些奇妙的东西~ 现在站在娜娜面前的是一台钢琴,这是一台看上去很正常的钢琴,上面有88个键(频率从27赫兹

B - 娜娜梦游仙境系列——跳远女王

B - 娜娜梦游仙境系列——跳远女王 Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Others) Problem Description 娜 娜觉得钢琴很无趣了,就抛弃了钢琴,继续往前走,前面是一片湖,娜娜想到湖的对岸,可惜娜娜找了好久都没找到小桥和小船,娜娜也发现自己不是神仙,不能像 八仙过海一样.正当娜娜发愁的时候,娜娜发现湖上面有一些石头!娜娜灵机一动,发现可以沿着石头跳吖跳吖,这样

acdream 1684 娜娜梦游仙境系列——莫名其妙的插曲 (gcd)

题意:一开始有一个集合,集合里有n个不同的数,然后Alice(娜娜)与Bob轮流进行操作,每人都可以任意选择两个数a,b,不妨设a>b,不过要求a-b不在集合中,把a-b放入集合(集合元素个数只增不减).如果轮到某人,无法进行任何操作,则该人输掉游戏.当Alice(娜娜)与Bob都沿着最优策略进行,娜娜先手,最终谁会获胜? 思路:减来减去的,跟最大公约数GCD差不多.此题没有什么最优的策略,都是平等的.用的也不是博弈知识. 最后不能操作的局面一定是{1g, 2g,3g......xg},3g表示

ACdream HUT新生摸底训练赛 E - 娜娜梦游仙境系列——莫名其妙的插曲 数论

解题思路:其实就是找能组成的最大集合.max(a[1],a[2],a[3].........a[n])/gcd(a[1],a[2],a[3],......a[n]) 解题代码: 1 // File Name: e.cpp 2 // Author: darkdream 3 // Created Time: 2015年04月13日 星期一 13时56分11秒 4 5 #include<vector> 6 #include<list> 7 #include<map> 8 #i