Форум программистов, компьютерный форум CyberForum.ru

На очередной ночной вечеринке факультета студенты в количестве N человек решили порассказывать байку из K слов и для этого сели в один круг вокруг кос - C++

Восстановить пароль Регистрация
 
sm1992
2 / 2 / 0
Регистрация: 27.05.2013
Сообщений: 8
28.05.2013, 20:55     На очередной ночной вечеринке факультета студенты в количестве N человек решили порассказывать байку из K слов и для этого сели в один круг вокруг кос #1
Входной файл: input.txt
Выходной файл: output.txt
Время на тест: 9 секунд
На очередной ночной вечеринке факультета студенты в количестве N человек решили порассказывать байку из K слов и для этого сели в один круг вокруг костра. Каждый человек называет по одному слову из байти. Человек, сказавший последнее слово байки уходит и рассказ повторяется со следующего за ним человека с самого начала. Первый рассказ начинается с первого человека, рассказ и нумерация людей - в порядке рассадки по часовой стрелке. Вам необходимо выяснить, кто останется последним?

Формат входного файла:

В первой строке входного файла input.txt записаны два целых числа N и K через один пробел - количество студентов и количество слов в байке, соответственно. Ограничения на значения: 1≤N≤100000, 0≤K≤1000000000. Гарантируется, что для предложенного набора данных результат всегда существует. Каждая строка заканчивается переходом на новую строку.
Формат выходного файла:

В первую строку выходного файла output.txt необходимо вывести без пробелов число X - номер оставшегося человека по исходной нумерации.

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

7 2
Пример вывода:

7



вот мой код работает слишком долго нужно ускорить хотябы в 3 разы


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include<stdio.h>
#include<iostream>
using namespace std;
struct och
{
    long per;
    long znach;
    long sled;
};
och *mass;
FILE *fp;
long N,K,p, ns;
long adres1, adres2=0;
int main()
{
    fp=fopen("input.txt","r");
    fscanf(fp,"%d",&N);
    fscanf(fp,"%d",&K);
    fclose(fp);
    long i=1;
    mass=new och[N];
    mass[0].per=N-1;
    mass[0].sled=1;
    mass[0].znach=0;
    for (i=1;i<N-1;i++)
    {
 
        mass[i].per=i-1;
        mass[i].sled=i+1;
        mass[i].znach=i;
 
    }
    mass[N-1].per=N-2;
    mass[N-1].sled=0;
    mass[N-1].znach=N-1;
    ns=N;
    while (mass[adres2].sled!=mass[adres2].znach)
    {
        if (K>ns)
        {
            long l=K/ns;
            p=K-(ns*l);
            if (p==0)
                p=ns;
        //  cout<<ns<<endl<<l<<endl<<p<<endl;
        //  system("Pause");
        }
        else
            p=K;
        adres1=adres2;
        for (long t=0;t<p-1;t++)
        {
            adres1=mass[adres1].sled;
        }
        mass[mass[adres1].per].sled=mass[adres1].sled;
        mass[mass[adres1].sled].per=mass[adres1].per;
        adres2=mass[adres1].sled;
        ns--;
    }
    fp=fopen("output.txt","w");
    fprintf(fp,"%d \n",mass[adres2].znach+1);
    fclose(fp);
    //cout<<mass[mass[adres2].per].znach+1<<endl<<mass[mass[adres2].sled].znach<<endl;
//  system("Pause");
    return 0;
}
может предложите свой вариант????
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.05.2013, 20:55     На очередной ночной вечеринке факультета студенты в количестве N человек решили порассказывать байку из K слов и для этого сели в один круг вокруг кос
Посмотрите здесь:

Вводится с клавиатуры строка .Подсчитатать колличество слов начинающихся с первой буквы этого слова C++
Вводится с клавиатуры слово .Подсчитатать колличество слов начинающихся с первой буквы этого слова C++
Решение уравнения с синус и кос итп C++
C++ С чего начали вы,когда решили изучать С++?
C++ необходимо в шаблонном классе, один из параметров которого контейнер, объявить итератор этого контейнера
C++ В такси одновременно сели три пасажира
Записать в другой файл первые n слов этого файла, где п задается с клавиатуры C++
C++ Может ли один человек написать на С++ игру типа mortal kombat 3

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kanonir
2 / 2 / 0
Регистрация: 20.01.2010
Сообщений: 12
07.10.2013, 12:58     На очередной ночной вечеринке факультета студенты в количестве N человек решили порассказывать байку из K слов и для этого сели в один круг вокруг кос #2
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 var x, y:longint;
 function b(x,y:longint):longint;
  begin
   if not(x=1)
  then b:=(b(x-1,y)+y-1) mod x + 1
   else b:=1
  end;
  begin
   assign(input, 'input.txt');
   reset(input);
  read(input,x,y);
   close(input);
   assign(output, 'output.txt');
   rewrite(output);
   writeln(output, b(x,y));
   close(output);
 end.
Yandex
Объявления
07.10.2013, 12:58     На очередной ночной вечеринке факультета студенты в количестве N человек решили порассказывать байку из K слов и для этого сели в один круг вокруг кос
Ответ Создать тему
Опции темы

Текущее время: 19:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru