尝试在scorify上提交代码,但我得到时间限制超出错误

时间:2017-05-17 06:47:26

标签: java complexity-theory biginteger time-limiting

我是竞争性编程世界的新手,我遇到了一个问题,试图计算只包含数字的大字符串的子串数。但是当我尝试在scorify平台上运行程序时,它给了我TimeLimitExceeded错误。所以,如果他们在最小化代码复杂性方面有任何帮助,我将非常感激

import java.util.Scanner;
import java.math.BigInteger;
public class test {
  

coprime是检测这两个数字是否互质的方法。

private static Boolean coprime(long a, long b) {
    long t;
    while(b!=0){
        t = b;
        b = a%b;
        a = t;
    }
    if(a==1)
        return true;

    return false;
}
  

我们的主要:)

public static void main(String[] args) {
    Scanner sc=new Scanner(System.in);
    //t is the number of test cases
    int t =sc.nextInt();
    String s;
    // n is the length of the string that we are going to scan .
    int n;
    //subs is the number of substrings found .
    int subs;
    // m is the long that we are going to compare the substrings with .
    long m;
    for(int i=0;i<t;i++){
        subs = 0;
        n=sc.nextInt();
        m=sc.nextLong();
        sc.nextLine();
        s = sc.nextLine();
        // I separated the cases of the length of s to optimize a little bit because BigIntegers are pain on the memory i think
        //case 1: if the string(number s) entered is greater then the long max value (not so specific)
        if(s.length()>=19){
        BigInteger a;
        // looping through all the substrings
        for(int j=0;j<n;j++){
            for(int p=j;p<n;p++){
                a = new BigInteger(s.substring(j,p+1));
                if(a.gcd(BigInteger.valueOf(m)).compareTo(BigInteger.ONE)==0){
                    subs++;
                }
            }
        }

    }
        // case 2 : if the string(number entered is in the range of long numbers.
    else{
        for(int j=0;j<n;j++){
            for(int p=j;p<n;p++){
                if(coprime(m,Long.parseLong(s.substring(j,p+1)))){
                    subs++;
                }
            }
        }
    }
        //printing the number of substrings.
        System.out.println(subs);
    }
    }

注意: 输入规格:

第一行输入包含测试用例数T(1≤T≤10)。

每个测试用例的第一行包含两个整数:N(1≤N≤1000),字符串的长度 和M(1≤M≤1000000000)。

第二行包含一个长度为N的字符串S.它保证S只包含数字。

  

例如:

输入:

1

10 324567

9207289341

输出:

40

  

此外:

如果您有关于组织我的代码的说明,我将很高兴听到

谢谢。

对于那些提出问题的人。

  

问题C.共素子串

如果它们的最大公约数等于1,则说两个正整数是共同素数。现在给定一个数字串S和一个整数M,我们有兴趣计算S的子串的数量。与M合作。

  

输入规格:

第一行输入包含测试用例数T(1≤T≤10)。

每个测试用例的第一行包含两个整数:N(1≤N≤1000),字符串的长度和M(1≤M≤1000000000)。

第二行包含一个长度为N的字符串S.它保证S只包含数字。

  

输出规格:

对于每个测试用例打印,在单行上,与M共同构成的S的子字符串数。

  

STDIN

这是STDIN的内容。

1 10 324567 9207289341个
STDOUT

您的解决方案应该产生类似的结果。

40

0 个答案:

没有答案