ENG  RUSTimus Online Judge
Online Judge
Problems
Authors
Online contests
About Online Judge
Frequently asked questions
Site news
Webboard
Links
Problem set
Submit solution
Judge status
Guide
Register
Update your info
Authors ranklist
Current contest
Scheduled contests
Past contests
Rules
back to board

Discussion of Problem 1209. 1, 10, 100, 1000...

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

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

Edited by author 04.05.2012 21:02
Re: Accepted in JAVA
Posted by naik 26 Mar 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
Posted by MUHAMMAD 3 Apr 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
Posted by Roman 16 May 2014 16:10
Time limit exceeded(