Форум программистов, компьютерный форум 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. прочитать файл и вычислить сумму его элементов подробнее

Показать сообщение отдельно
lunohod-1
1 / 1 / 0
Регистрация: 14.12.2011
Сообщений: 44
24.01.2013, 13:41     Задача с olympiads.ru
Всем привет.
Столкнулся с проблемой при решении задачи E "Распродажа" с сайла olympiads.ru (http://olympiads.ru/zaoch/2012-13/problems/index.shtml)

Написал код:
Код
#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])) {
				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;
}

int tryto(long long a[],int k,int 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++;
}
r=i;
if(a[i]==s) {
return 1;
}
else if(a[0]>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;
	}
}
Отлично проходит тестовый пример, но при первом же реальном тесте неверно.
Помогите найти ошибку, может что-то в логике отбора?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 16:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru