zoukankan      html  css  js  c++  java
  • K倍区间

    /*
    标题: k倍区间
    
    给定一个长度为N的数列,A1, A2, ... AN,如果其中一段连续的子序列Ai, Ai+1, ... Aj(i <= j)之和是K的倍数,我们就称这个区间[i, j]是K倍区间。  
    
    你能求出数列中总共有多少个K倍区间吗?  
    
    输入
    -----
    第一行包含两个整数N和K。(1 <= N, K <= 100000)  
    以下N行每行包含一个整数Ai。(1 <= Ai <= 100000)  
    
    输出
    -----
    输出一个整数,代表K倍区间的数目。  
    
    
    例如,
    输入:
    5 2
    1  
    2  
    3  
    4  
    5  
    
    程序应该输出:
    6
    
    资源约定:
    峰值内存消耗(含虚拟机) < 256M
    CPU消耗  < 2000ms
    
    
    请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。
    
    所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
    不要使用package语句。不要使用jdk1.7及以上版本的特性。
    主类的名字必须是:Main,否则按无效代码处理。
    
    
    
    
    */
    package test;
    
    import java.util.Scanner;
    
    public class k倍区间 {
        public static void main(String arg[]){
            long sta=System.currentTimeMillis();
            Scanner input=new Scanner(System.in);
            int n=input.nextInt();
            int k=input.nextInt();
            int[] a=new int[n+1];
            long[] dp=new long[n+1];
            dp[0]=0;long ans=0;
            for(int i=1;i<=n;i++){
                a[i]=input.nextInt();
                dp[i]=dp[i-1]+a[i];//dp中记录到第i个数时的总和
            }
            
            for(int i=1;i<=n;i++)  
            {  
                for(int j=0;j<=n-i;j++)  
                {  
                    if((dp[j+i]-dp[j])%k==0)  //计算序列中i-j数的和是否为k
                        ans++;  
                }  
            }
            System.out.print(ans);
            long end=System.currentTimeMillis();
            System.out.print("time"+(end-sta));
        }
    
    }
  • 相关阅读:
    水题大战Vol.3 B. DP搬运工2
    火题小战 C. 情侣?给我烧了!
    火题小战 B. barbeque
    火题小战 A.玩个球
    P6087 [JSOI2015]送礼物 01分数规划+单调队列+ST表
    NOI2020D1T1美食家
    Java 的随机数
    MySQL 配置文件的配置
    NOIP2020准(ge)备(zi)日记
    android开发EditText禁止输入中文密码的解决方法
  • 原文地址:https://www.cnblogs.com/ljs-666/p/8563355.html
Copyright © 2011-2022 走看看