Вывод последних k цифр искомого количества последовательностей - C#

Узнай цену своей работы

Формулировка задачи:

Никак не могу понять как решить данную задачу. Если сказать точнее, я не понимаю как она должна работать. Мне не очень понятно как формируются выходные данные, и если бы кто нибудь сказал мне как например сформировалась тройка в первом примере, и почему во втором примере на выходе 1, я бы все понял. Спасибо!
Решая задачу по информатике, Вова в очередной раз допустил ошибку. Он снова вывел в выходной файл числа, забыв разделить их пробелами. Увидев полученный результат, Вова сначала огорчился, а потом задумался над следующим вопросом: сколько существует различных последовательностей неотрицательных целых чисел, таких что, если выписать их без пробелов, то получится тот же результат, что и у него. Он вспомнил также, что его программа смогла вывести не произвольные числа, а только те, что не превосходят C и не имеют ведущих нулей. Чтобы ответить на поставленный вопрос, Вова решил написать программу, которая позволит ему найти число различных последовательностей неотрицательных целых чисел, в каждой из которых любое число не превосходит C. Он понимал, что такое число могло быть достаточно большим, поэтому ограничился поиском только последних k цифр этого числа. Требуется написать программу, которая покажет Вове, как можно правильно решить поставленную им задачу. Входные данные Первая строка входного файла содержит три целых числа — n, C и k (1 ≤ n ≤ 50000, 1 ≤ C ≤ 10^8, 1 ≤ k ≤ 18). Во второй строке этого файла содержится результат работы Вовиной программы, состоящий из n цифр. Выходные данные В выходной файл выведите последние k цифр искомого количества последовательностей (без ведущих нулей).
входные данные 3 11 2 111 выходные данные 3
входные данные 19 9 1 0123456789876543210 выходные данные 1
входные данные 1 8 3 9 выходные данные 0

Решение задачи: «Вывод последних k цифр искомого количества последовательностей»

textual
Листинг программы
  1. using System;
  2. using System.IO;
  3. using System.Linq;
  4.  
  5. class Program
  6. {
  7.     static int Solve(int n, int c, int k, int[] seq)
  8.     {
  9.         k = (int)Math.Pow(10, k);
  10.  
  11.         int[] a = new int[n];
  12.         int[] b = new int[n];
  13.         for (int i = n - 1; i >= 0; i--)
  14.         {
  15.             if (seq[i] == 0) a[i] = 1;
  16.             else
  17.                 for (int x = 0, j = i; j < n && x <= c; j++)
  18.                 {
  19.                     x = x * 10 + seq[j];
  20.                     if (x <= c) a[i]++;
  21.                 }
  22.  
  23.             if (i + a[i] >= n) b[i] = 1;
  24.             for (int j = i + 1; j < i + a[i] + 1 && j < n; j++)
  25.                 b[i] = (b[i] + b[j]) % k;
  26.         }
  27.  
  28.         return b[0];
  29.     }
  30.  
  31.     static void Main()
  32.     {
  33.         var input = File.ReadAllLines("input.txt");
  34.         var nck = input[0].Split().Take(3).Select(x => int.Parse(x)).ToArray();
  35.         var seq = input[1].Select(x => x - '0').ToArray();
  36.         var slv = Solve(nck[0], nck[1], nck[2], seq);
  37.         File.WriteAllText("output.txt", slv.ToString());
  38.     }
  39. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.182 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы