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

Задача с olympiads.ru - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Определить треугольники минимальной и максимальной площади, которые можно построить из отрезков http://www.cyberforum.ru/cpp-beginners/thread770609.html
13. Известны длины отрезков a, b, c и d. Определить треугольники минимальной и максимальной площади, которые можно построить из этих отрезков. помогите решить эту задачу с помощью <stdio.h> <math.h> <iostream>
C++ Укажите путь заблудшему Есть строка вида "Alex Johnson|1234678901\nBill Gates|548161198\n" - т.е. "<Абонент>|<номер телефона>\n...". Написал функцию которая принимает в качестве параметра эту строку и возвращает массив структур: ... struct Abonent { char name; char number; }; ... http://www.cyberforum.ru/cpp-beginners/thread770605.html
в проекте - надо в проекте win32api вынести все в другой *cpp* а не получаеться C++
определил функцию в другом спп и в основном ругается компилятор
Определить треугольники минимальной и максимальной площади C++
Известны длины отрезков a, b, c и d. Определить треугольники минимальной и максимальной площади, которые можно построить из этих отрезков.
C++ Определить, пересекаются ли парабола и прямая http://www.cyberforum.ru/cpp-beginners/thread770484.html
Определите, пересекаются ли парабола у=cx2+dx+f и прямая y=ax+b. При положительном ответе найти точки пересечения.
C++ составить программу,которая создает файл, состоящий из 10 значений типа int. прочитать файл и вычислить сумму его элементов составить программу,которая создает файл, состоящий из 10 значений типа int. прочитать файл и вычислить сумму его элементов подробнее

Показать сообщение отдельно
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
24.01.2013, 20:22     Задача с olympiads.ru
См комментарии:
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 <iostream>
#include <algorithm>
int n,i,j,r;
unsigned int c[501];
long long a[501],b[501];
unsigned long M;
long long m[500001],k[500001],s[500001],t[500001];
using namespace std;
int tryto(long long a[],int r,int sum);
int main() {
cin>>n;
for(i=1;i<=n;i++) {
    cin>>c[i]>>a[i]>>b[i];
}
cin>>M;
for(i=1;i<=M;i++) {
cin>>m[i]>>k[i]>>s[i];
}
long v;
r=0;
for(i=1;i<=M;i++) {
    for(j=1;j<=n;j++) {
        if((m[i]>=a[j]) && (m[i]+s[i]<0 || m[i]+s[i]+1<=b[j]) && (k[i]>=c[j])) {// вот здесь запоминаем условие что k[i]>=c[j]
                t[r]=c[j];// т.е. в массив t[] попадают все цены, меньше или равные k[i]
                r++;
            }
            }
        if(tryto(t,r,k[i])==1 && t[0]>0) {// итак, в фунцкцию tryto() мы посылаем массив t[] в котором r чисел (с индексами от 0 до r-1), значения которых меньше или равно k[i]. Теперь отправляемся в саму функцию tryto()
        cout<<"YES"<<endl;
        }
        else { cout<<"NO"<<endl; 
        }
        for(v=0;v<r;v++) { t[v]=0; }
        r=0;
}
return 0;
}
 
int tryto(long long a[],int k,int s) {// здесь имеем массив a[] (со значения по индексам от 0 до k-1), значения которых меньше или равно s.
long sum,b,c,d,e,r;
sum=b=0;
std::sort(a,a+k);
int i=0;
while(a[i]<=s && i<=k) {// вот в этом цикле i вырастет до значения k+1 (к гадалке не ходи). Уже при i==k идет обращение неизвестно к какому элементу в массиве a[].
i++;
}
r=i;// r тоже станет значением k+1
if(a[i]==s) {// в элементе a[k+1] неизвестно что записано (и может быть даже выход за границы массива a[])
return 1;
}
else if(a[0]>s) {// в a[] записывались элементы меньшие или равные s, поэтому очень странное условие
return 0;
}
else {
    for(b=0;b<=r;b++) {// на этой строчке пиво заканчивается, но уже и так достаточно написал. Еще раз пересмотрите код. Задача решаема (довольно очень простая), скорее всего даже если исправите ошибки, по времени не пройдет. Пробуйте сдавать, что получится показывайте )
    sum=a[b];
        for(c=b;c<=r;c++) {
        if(c!=b) {
            if(a[b]+a[c]<=s) { sum+=a[c]; }
        }
        }
        if(sum==s) { return 1; }
    }
    return 0;
    }
}
 
Текущее время: 17:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru