2015-06-02 2 views
1

Вопрос: -Максимальное количество элементов, которые могут быть добавлены в arraylist

Вам предоставляется строка S из N символов. Известно, что строка состоит из строчных латинских букв. Строка генерируется случайным образом. Это означает, что каждый символ выбирается случайным образом и независимо от других из множества {'a', 'b', ..., 'z'}. Все буквы имеют равную вероятность появления.

Вам предоставляется Q запросов на эту строку. Каждый запрос имеет вид P C, где P - целое число от 1 до N (оба включительно), а C - символ из множества {'a', 'b', ..., 'z'}. Оба P и C были выбраны случайным образом и независимо от других запросов.

Если у вас есть запрос вид ПК, вы должны изменить символ ПТГА S к C. После каждого изменения, мы просим вас, чтобы вывести число различной непустой подстроки из S.

Input Format Первая строка ввода состоит из двух целых чисел с одиночным пространством N и Q - длины строки S и числа запросов соответственно.

Вторая строка содержит строку S.

Следующие строки Q описывают запросы в форме P C, где P и C также разделены одним пробелом.

Ограничения

4 ≤ N ≤ 75000 4 ≤ Q ≤ 75000

Формат вывода Выход Q линий. Выведите количество различных подстрок S после i-го запроса на i-й строке вывода.

Пример ввода

4 4 
aaab 
1 a 
2 b 
3 c 
4 d 

Пример вывода: -

7 
7 
9 
10 

Объяснение: -

после замены символа в 1-м индексом с, мы по-прежнему иметь оригинальную строку AAAB. Итоговые непустые подстроки AAAB являются

а б аа аб ааа ааЪ AAAB следовательно 7.

после замены символа на 2-индексе с Ь, мы имеем строку ABAB. Итоговые непустые подстроки ABAB являются

а б аб ба аба бабы ABAB следовательно 7.

после замены символа на 3-й индексе с с, у нас есть строка ABCB. Итоговые непустые подстроки АВ являются

а б абы Ьс центибар а BCB ABCB следовательно 9.

после замены символа на 4-индексе с д, мы имеем строку ABCD. Полными непустыми подстроками abcd являются

a b c d ab bc cd abc bcd abcd следовательно 10.

мой код: -

import java.io.*; 
import java.util.*; 
import java.text.*; 
import java.math.*; 
import java.util.regex.*; 

public class Solution 
{ 
public static long count(String string) 
{ 
    String sub; 
    int i,c,length; 
    ArrayList<String>al=new ArrayList<String>(); 
    length = string.length(); 

    for(c=0;c<length;c++) 
    { 
     for(i=1;i<=length-c;i++) 
     { 
      sub = string.substring(c,c+i); 
      al.add(sub); 
     } 
    } 

    HashSet hs = new HashSet(); 
    hs.addAll(al); 
    al.clear(); 
    al.addAll(hs); 

    return al.size(); 
} 
public static void main(String[] args) 
{ 
    Scanner sc = new Scanner(System.in); 
    int n = sc.nextInt(); 
    int q = sc.nextInt(); 

    String s = sc.next(); 
    StringBuilder m = new StringBuilder(s); 
    while((q--)>0) 
    { 
     int p = sc.nextInt() - 1; 
     char c = sc.next().toCharArray()[0]; 
     m.setCharAt(p,c); 
     String z = m.toString(); 
     long x = count(z); 
     System.out.println(x); 
    } 
} 
} 

при входе очень большой, как и если ответ будет больше, чем (максимальное значение INT) 2147483647, например, сказать, 2812324482 .... я получить неверные результаты

Как мы все знаем, метод size() возвращает int, поэтому максимальная емкость равна 2147483647, но мой ответ должен быть больше, чем тот, который не может быть размещен.

Может кто-нибудь дать мне представление о сохранении большей ценности или любой другое альтернативное руководство или предопределенный метод od, который возвращает размер arraylist, максимальная емкость которого превышает 2147483647?

+1

В любом случае вы не можете хранить много экземпляров объектов в памяти. Возможно, вы должны рассмотреть другой подход. –

+0

Может ли увеличить размер основной памяти? – Razib

+1

Да, если вы пытаетесь решить такую ​​проблему, фактически сохраняя все возможности, вы проиграли, прежде чем начать. –

ответ

0

Максимальное количество предметов, содержащихся на ArrayList, зависит от его реализации. Так как List<Integer> отличается от List<Person>, поэтому максимальное количество элементов в этих двух List должно быть разным.

+3

Даже если у вас есть бесконечная память (например, 200 ГБ оперативной памяти), обе они имеют одну и ту же границу: массив, используемый в 'ArrayList' для реализации, размер которого не может превышать' Integer.MAX_VALUE '(на самом деле максимальный размер массива меньше этого значения). –

Смежные вопросы

 Смежные вопросы