标签:... 大数据 efault 一周 过程 put lap ica ges
1 5 6 4 5 6 5 4 4 11 1 20 6 10
2 2 0 2 1 0
思路:这题的数据有一个特点,询问次数特别多,而数据组数不多,这么多次询问每次都要计算会话费大量的时间,所以我们需要在他询问之前就算出所有的答案,这样在他询问的时候就能直接输出答案了,具体实现方法如下
1、首先,这道题需要多次计算区间和,所以我们用前缀和的方法来存数据。
1 sum[0]=0; 2 for(i=1;i<=n;i++) 3 { 4 scanf("%d",&temp); 5 sum[i]=sum[i-1]+temp; 6 }
2、这次的数据是有负数的,我打算用两个数组分别储存正数的答案和负数的答案,a数组存正数和0的答案,b数组存负数的答案。
3、进行打表,遍历所有的区间,把可能会询问到的答案存到数组里,如果满足条件,就让对应的数组元素+1。
1 for(i=0;i<n;i++) 2 for(j=i+1;j<=n;j++) 3 if(abs(sum[j]-sum[i])<=1000005)///sum是前i项和,a存正数答案,b存负数 4 if(sum[j]-sum[i]>=0) 5 a[sum[j]-sum[i]]++; 6 else 7 b[sum[i]-sum[j]]++;
4、综合以上方法,书写对应的程序,注意每次的初始化,就能AC了。
标签:... 大数据 efault 一周 过程 put lap ica ges
原文地址:http://www.cnblogs.com/xseventh/p/6262936.html