Форум программистов, компьютерный форум 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++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
26.01.2013, 06:27
Цитата Сообщение от lunohod-1 Посмотреть сообщение
А все же, у меня ошибка в коде или в логике построения кода?
и в коде и в логике (см комментарии):
Цитата Сообщение от lunohod-1 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int tryto(long long a[],int k,int s) {
long sum,b,c,r;
sum=b=0;
std::sort(a,a+k);
r=k;
if(a[k]==s) {// в массиве a[] записано всего k чисел с индексами от 0 до k-1, поэтому эта строка неправильная
return 1;
}
else {
* * for(b=0;b<=r;b++) {// здесь таже самая ошибка, при b равном r
* * sum=a[b];
* * * * for(c=1;c<=r;c++) {// а вот здесь логика поиска неправильная. Так Вы никогда не найдете правильный ответ.
* * * * if(c!=b) {
* * * * * * if(a[b]+a[c]<=s) { sum+=a[c]; }
* * * * }
* * * * if(sum==s) { return 1; }
* * * * }
* * }
* * return 0;
* * }
}
Вот так проходит все тесты:
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
#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;
bool 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])) {
                t[r]=c[j];
                r++;
            }
            }
        if(tryto(t,r,k[i])==1 && t[0]>0) {
        cout<<"YES"<<endl;
        }
        else { cout<<"NO"<<endl; 
        }
       // for(v=0;v<r;v++) { t[v]=0; }
        r=0;
}
return 0;
}
 
bool tryto(long long a[],int k,int s) {
    bool b[100001]={0};
    int i, j;
    for(i=0; i<r; i++)
    {
        for(j=s; j>0; j--)
            if(b[j] && a[i]+j<=s)
                b[j+a[i]]=true;
        b[a[i]]=true;
    }
    return b[s];
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru