Блог пользователя Renyxa

Автор Renyxa, история, 9 лет назад, По-русски

Здравствуйте. Дорешиваю задачи с полуфинала республиканской олимпиады, но одну задачу никак не могу решить. Подскажите пожалуйста, как решить эту задачу.

Полный текст и комментарии »

  • Проголосовать: нравится
  • -1
  • Проголосовать: не нравится

Автор Renyxa, история, 9 лет назад, По-английски

Hello. I solve DP problems. But I can't solve this problem. Please help me.

Полный текст и комментарии »

  • Проголосовать: нравится
  • -18
  • Проголосовать: не нравится

Автор Renyxa, 9 лет назад, По-русски

Здравствуйте. Долго думал над этой задачей, но решения не придумал. Подскажите, пожалуйста, как можно решить эту задачу.

Полный текст и комментарии »

  • Проголосовать: нравится
  • -16
  • Проголосовать: не нравится

Автор Renyxa, история, 9 лет назад, По-русски

Здравствуйте. Я решал задачу 615E - Hexagons. И столкнулся с такой проблемой. При отправке кода 15331715, проходит только первый тест, а при отправке кода 15331768, проходят все тесты. Единственное их отличие в том, что в первом задача решается в функциях, а во втором всё в main(). Причём первый код у меня на компьютере работает верно, но при запуске в Codeforces выдаёт всё время один и тот же ответ.

Полный текст и комментарии »

  • Проголосовать: нравится
  • -15
  • Проголосовать: не нравится

Автор Renyxa, 10 лет назад, По-русски

Здравствуйте, братцы. Подскажите пожалуйста хорошему человеку, как решить Задачу J из http://neerc.ifmo.ru/school/russia-team/today/problems-internet.pdf. 3 дня думаю ничего в голову не приходит.

Полный текст и комментарии »

  • Проголосовать: нравится
  • +8
  • Проголосовать: не нравится

Автор Renyxa, 10 лет назад, По-русски

Здравствуйте. Помогите пожалуйста решить эту задачу.

  • Задача A-Kvadratlar
  • Ограничение времени: 1 с
  • Ограничение памяти: 64 M
  • На плоскости заданы N квадратов, стороны которых параллельны осям координат. Координаты всех углов квадратов- целые числа, и сами квадраты не касаются и пересекаются.
  • Необходимо подсчитать число квадратов, видимых из начала координат (точки (0, 0) ).
  • Квадрат видим из точки O, если существуют две различные точки А и B на одной из его сторон таких, что треугольник OAB не имеет никаких общих точек с любым другим квадратом.
  • Формат входных данных
  • Первая строка содержит единственное число N ( 1 ≤ N ≤ 1000), количество квадратов. Каждая из следующих N строк описывает один квадрат целыми числами X, Y и L (1 ≤ X, Y, L ≤ 10000), разделенными одним пробелом. X и Y — координаты левого нижнего угла квадрата и L — длина стороны квадрата.
  • Формат результата
  • Первая и единственная строка должна содержать количество квадратов, которые видимы из начала координат.
Входные данные      Результат работы
3
2 6 3 
1 4 1
3 4 1               3


4
1 2 1
3 1 1
2 4 2
3 7 1               2

Я попробовал полным перебором, но не получается, ничего другого в голову не приходит:

#include <bits/stdc++.h>

using namespace std;

#define LL long long
#define uLL unsigned long long
#define pb push_back
#define PI 3.14159265359




const double EPS = 1e-9;


inline double inter(double x1, double y1,double x2, double y2,double x3, double y3)
{
    return (x2-x1) * (y3-y1) - (y2-y1) * (x3-x1);
}
inline bool intersect_1(double a, double b, double c, double d)
{
    if(a>b) swap(a, b);
    if(c>d) swap(c, d);
    return max(a, c) <= min(b, d);
}

inline bool intersect(double x1, double y1,double x2, double y2,double x3, double y3, double x4, double y4)
{
    return intersect_1(x1, x2, x3, x4)
           && intersect_1(y1, y2, y3, y4)
           && inter(x1, y1, x2, y2, x3, y3) * inter(x1, y1, x2, y2, x4, y4) <= 0    // ! * !
           && inter(x3, y3, x4, y4, x2, y2) * inter(x3, y3, x4, y4, x1, y1) <= 0;   // ! * !
}


struct Sqr
{
    struct
    {
        double x, y;
    } P1;
    struct
    {
        double x, y;
    } P2;
    struct
    {
        double x, y;
    } P3;
};


int main()
{





    int n;
    int amount = 0;

    cin >> n;

    Sqr *S = new Sqr[n+2];

    for(int i = 1; i <= n; ++i)
    {
        double x, y, l;

        cin >> x >> y >> l;

        S[i].P1.x = x;
        S[i].P1.y = y+l;

        S[i].P2.x = x;
        S[i].P2.y = y;

        S[i].P3.x = x+l;
        S[i].P3.y = y;

        /*cout << S[i].P1.x << " " << S[i].P1.y << endl;
        cout << S[i].P2.x << " " << S[i].P2.y << endl;
        cout << S[i].P3.x << " " << S[i].P3.y << endl;*/
    }

    for(int i = 1; i <= n; ++i)
    {
        bool q = 0;
        for(double y = S[i].P1.y; y >= S[i].P2.y; y -= 0.5)
        {
            q = 0;
            for(int j = 1; j <= n; ++j)
            {

                if(i != j)
                {
                    if(intersect(S[i].P1.x, y, 0.0, 0.0, S[j].P1.x, S[j].P1.y, S[j].P2.x, S[j].P2.y) == 1)
                    {
                        q = 1;
                    }

                        if(intersect(S[i].P1.x, y, 0.0, 0.0, S[j].P2.x, S[j].P2.y, S[j].P3.x, S[j].P3.y) == 1)
                        {
                            q = 1;
                        }
                }
            }
            if(q == 0)
            {
                //cout << "1 i = " << i << endl;
                ++amount;
                break;
            }
        }

        if(q == 0)
            continue;



        for(double x = S[i].P2.x; x <= S[i].P3.x; x += 0.5)
        {
            q = 0;

            for(int j = 1; j <= n; ++j)
            {

                if(i != j)
                {
                    if(intersect(x, S[i].P2.y, 0.0, 0.0, S[j].P1.x, S[j].P1.y, S[j].P2.x, S[j].P2.y) == 1)
                    {
                        q = 1;
                    }
                        if(intersect(x, S[i].P2.y, 0.0, 0.0, S[j].P2.x, S[j].P2.y, S[j].P3.x, S[j].P3.y) == 1)
                        {
                            q = 1;
                        }
                }
            }

            if(q == 0)
            {
                //cout << "2 i = " << i << endl;
                ++amount;
                break;
            }

        }
    }

    cout << amount << endl;

    return 0;
}

Полный текст и комментарии »

  • Проголосовать: нравится
  • -16
  • Проголосовать: не нравится

Автор Renyxa, 10 лет назад, По-русски

Здравствуйте. Как решить эту задачу ?

В стране Берляндии очень развит общественный транспорт. Проезд в нем бесплатный, но при этом каждому пассажиру при входе выдают билетик с уникальным номером. Особенно ценятся так называемые счастливые билетики. Билетик называется счастливым, если сумма цифр на четных позициях в его номере равна сумме цифр на нечетных позициях. Васе известно, что билеты выдаются подряд в порядке возрастания номеров. В очередной раз войдя в автобус Вася получил свой очередной билет и тут ему стало интересно, какой существует минимальный счастливый билетик с номером, меньшим номера билетика Васи. Помогите Васе узнать ответ на этот вопрос.

Формат входных данных

В единственной строке задан номер билетика Васи — натуральное число, имеющее в своей десятичной записи не более 100 цифр.

Формат результата

Выведите минимальный номер счастливого билетика, который больше номера билетика Васи.

Полный текст и комментарии »

  • Проголосовать: нравится
  • -3
  • Проголосовать: не нравится

Автор Renyxa, 10 лет назад, По-русски

Здравствуйте. Решаю задачу про точку пересечения прямых(http://www.e-olimp.com/problems/2143), используя формулы X = -(C1*B2-C2*B1)/(A1*B2-A2*B1), Y=(A2*C1-A1*C2)/(A1*B2-A2*B1). Бьюсь над этой задачей второй день, но не пойму, почему не проходят некоторые тесты. Помогите пожалуйста. http://www.e-olimp.com/solutions/1889546

#include <bits/stdc++.h>
using namespace std;

struct Line {
	double a, b, c;
};

Line s;
Line d;

double x, y;

void inter_point() {
	x = (d.c*s.b &mdash; s.c*d.b) / (s.a*d.b &mdash; d.a*s.b);
	y = (s.c*d.a &mdash; d.c*s.a) / (s.a*d.b &mdash; d.a*s.b);
}


int main() {

	cout.setf(ios::fixed);
	cout.precision(2);

 
	cin >> s.a >> s.b >> s.c;
	cin >> d.a >> d.b >> d.c;

	inter_point();

	cout << x << ' ' << y << endl;

	return 0;
}

Полный текст и комментарии »

  • Проголосовать: нравится
  • +4
  • Проголосовать: не нравится

Автор Renyxa, 10 лет назад, По-русски

Как решить эту задачу ?

Дается массив целых чисел. Отсортируйте массив по возрастанию, используя не оптимизированный алгоритм сортировки вставкой . Первая строка содержит число n, количество элементов в массиве. Вторая строка содержит массив. Третья строка содержит чиcло m, номер итерации которую мы должны.

Итерацией считается действительной — если произошли изменения в массиве.

Начальное состояние массива — итерацией с нулевым индексом.

В единственной строке — вывести значения элементов массива на m-ой итерации сортировки.

Полный текст и комментарии »

  • Проголосовать: нравится
  • -18
  • Проголосовать: не нравится