ENG  RUSTimus Online Judge
Online Judge
Задачи
Авторы
Соревнования
О системе
Часто задаваемые вопросы
Новости сайта
Форум
Ссылки
Архив задач
Отправить на проверку
Состояние проверки
Руководство
Регистрация
Исправить данные
Рейтинг авторов
Текущее соревнование
Расписание
Прошедшие соревнования
Правила
вернуться в форум

Обсуждение задачи 1209. 1, 10, 100, 1000...

Accepted in JAVA
Послано Adilbek_ 3 май 2012 10:45
Решение в лоб вряд ли пройдет.
Мой алгоритм решения:
1. Легко заметить что сумма цифр от 1 до N может быть вычислена по формуле арифметической прогрессий.
2. Первая цифра всегда один.
3. Нужно найти самую меньшую или равную сумму к нашему К, её легко можно найти использую пункт 1.
4. Если найденная сумма минус К ровно одному то ответ один, иначе ноль.

Edited by author 04.05.2012 21:02
Re: Accepted in JAVA
Послано kami_botanik 11 мар 2013 19:51
Почему вы не можете объяснять внятно, такое ощущение что вы не сами решаете свои задачи! Объясните мне пожалуйста, Как вычислить сумму от 1 до N Если нам только известен an То есть место положения N, но не известен сам N. Ведь формула такова: Sn = a1+an/2*N; Как найти Sn Если нам не известно N ?????...
Adilbek_ писал(a) 3 мая 2012 10:45
Решение в лоб вряд ли пройдет.
Мой алгоритм решения:
1. Легко заметить что сумма цифр от 1 до N может быть вычислена по формуле арифметической прогрессий.
2. Первая цифра всегда один.
3. Нужно найти самую меньшую или равную сумму к нашему К, её легко можно найти использую пункт 1.
4. Если найденная сумма минус К ровно одному то ответ один, иначе ноль.

Edited by author 04.05.2012 21:02
Re: Accepted in JAVA
Послано naik 26 мар 2014 01:13
Можно положить все возможные позиции в Set, а потом проверять есть ли эта позиция в Set'e.

Как заполняется Set: Постепенно суммируем числа начиная от 0 и заканчивая суммой не больше 2^31-1, промежуточные суммы кладем в Set, прибавив перед этим единицу.

Будьте внимательны при задании ограничения 2^31-1.

Сперва я указал так: 1<<31-1
Но это неправильно, т.к. приоритет у вычитания, а потом у сдвига.
Можно указать так (1<<31)-1 или еще проще Integer.MAX_VALUE (оба варианта равнозначны).
Я решал задачу с Long, но достаточно и Integer.

Edited by author 26.03.2014 01:14
Re: Accepted in JAVA
Послано MUHAMMAD 3 апр 2014 23:31
package acm.timus.ru;

import java.util.Scanner;

public class N_1209 {
  public static void main(String[] args) {
    Scanner sc=new Scanner(System.in);
    int n=sc.nextInt();
    int i=1,a=0,k=0;
    for (int j=1; j<=n; j++) {
       a=sc.nextInt();
       if (i<a) {
           while(i<a){ k++; i+=k; }
       }else{
           while(i>a){ i-=k; k--; }
       }
       if (i==a) { System.out.print("1"+" "); }
       else{System.out.print("0"+" ");}

    }
  }
}
Re: Accepted in JAVA
Послано Roman 16 май 2014 16:10
Time limit exceeded(