Пример #1
0
        public void Solve(TextReader input, TextWriter output)
        {
            var    scanner = new StreamTokenizer(input);
            int    testNum = scanner.NextInt();
            Random rnd     = new Random();

            foreach (int caseId in Enumerable.Range(1, testNum))
            {
                long R      = scanner.NextLong();
                long k      = scanner.NextLong();
                int  n      = scanner.NextInt();
                var  g      = Enumerable.Range(0, n).Select(i => scanner.NextLong()).ToArray();
                var  d      = Enumerable.Repeat(-1, n).ToArray();
                var  s      = Enumerable.Repeat((long)0, n + 1).ToArray();
                long answer = 0;
                for (int i = 0, r = 0; r < R; r++)
                {
                    if (d[i] > -1)
                    {
                        int l = r - d[i];
                        answer += (R - r) / l * (s[r] - s[d[i]]);
                        answer += s[(R - r) % l + d[i]] - s[d[i]];
                        break;
                    }
                    d[i] = r;
                    long c = 0;
                    int  j = i;
                    while (c + g[i] <= k)
                    {
                        c += g[i];
                        i++;
                        if (i == n)
                        {
                            i = 0;
                        }
                        if (i == j)
                        {
                            break;
                        }
                    }
                    answer  += c;
                    s[r + 1] = answer;
                }
                output.WriteLine("Case #{0}: {1}", caseId, answer);
            }
            output.Close();
        }
Пример #2
0
        public void Solve(TextReader input, TextWriter output)
        {
            var scanner = new StreamTokenizer(input);
            int testNum = scanner.NextInt();

            bool[] isPrime = new bool [R + 1];
            for (int i = 2; i <= R; i++)
            {
                isPrime[i] = true;
            }
            for (long i = 0; i <= R; i++)
            {
                if (isPrime[i])
                {
                    for (long j = i * i; j <= R; j += i)
                    {
                        isPrime[j] = false;
                    }
                }
            }

            foreach (int caseId in Enumerable.Range(1, testNum))
            {
                long n = scanner.NextLong();
                if (n == 1)
                {
                    output.WriteLine("Case #{0}: {1}", caseId, 0);
                }
                else
                {
                    int answer = 1;
                    for (long p = 2; p *p <= n; p++)
                    {
                        if (isPrime[p])
                        {
                            long s = p * p;
                            while (s <= n)
                            {
                                s *= p;
                                answer++;
                            }
                        }
                    }
                    output.WriteLine("Case #{0}: {1}", caseId, answer);
                }
            }
            output.Close();
        }