Wymyśliłem! Ale przepraczam limit czasu :(!
wag1-pierwszy składnik
wag2-drugi składnik
zapytanie czyli ta konkretna porporcja nutelii i mleka.
szukane- to taga wag2, że wag1+wa2=zapytanie.
Program dział tak:
wczytuje dane, sortuje 3 linie wejścia(wag2) i binarnie wyszukuje w wag2 dla każdego w wag1 takiej liczby szukane, że dadzą obie sumie zapytania(czyli te odpowiednie proporcje wa obu składników o które pyta Jaś). Jeśli znajdzie to przerywa pętlę i wybiera kolejne zapytanie. Czyli jeśli takiej proporcja nie iestnieje to musi przelecież po kolei cały wektor wag1
Do głowy przychodzi mi jeszcze cos takie aby liczbę i wstawiać na i-te miejsce w tablicy. Zrobiłbym tylko tak dla wag2. wag1 byłąby normalną nieposortowana tablicą. Wtedy wystarczyłoby obliczyć ile należy dodać do i-tego elementu z wag1 aby otrzymać proporcje i odwołać się do j-tego miejsca w tablicy wag2. Tym samym jeśli wag1,wag2 maja po n elementów to i-ty element wag1 sprawdza tylko czy pasuje do jednego elementu, a nie jak poprzednio do n elementów.
Weźmy przykład, bo to prościej zrozumieć. Dane przykładowe z treści:
wag1: 6 3 2 5 2
wag2: 7 4 1 6 8
zapytania:
15
14
5
4
9
Czyli wag(7)=7, wag(4)=4, itd. Natmiast wag(2)=0, wag(9)=0 - bo takie elementy nie pojawiły siena wejściu.
Bierzemy teraz wag1(0)=6, zapytanie(0)=15, szukane=15-9. Sprawdzamy, czy wag(9)==9. Nie jest to prawda. Podobnie dla wag(1),wag(2)... Dla zapytania(15) akurat nie znajdziemy.
Poniżej kod STAREGO ROZWIAZANIA, które nie mieście sie w limicie:smile:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void wczytaj(vector<int> &b);
int main()
{
int n,m;
cin>>n>>m;
vector<int> wag1(n);
vector<int> wag2(n);
vector<int> zapytania(m);
vector<string> odp;
wczytaj(wag1);
wczytaj(wag2);
wczytaj(zapytania);
sort(wag2.begin(),wag2.end());
for(int i=0;i<m;i++)
{
for(int k=0;k<n;k++)
{
int szukane=zapytania[i]-wag1[k];
if(binary_search(wag2.begin(),wag2.end(),szukane))
{
odp.push_back("TAK");
break;
}
else if(!binary_search(wag2.begin(),wag2.end(),szukane) && k==n-1)
{
odp.push_back("NIE");
}
}
}
for(int i=0;i<odp.size();i++)
{
cout<<odp[i]<<endl;
}
}
void wczytaj(vector<int> &b)
{
for(int i=0;i<b.size();i++)
{
int liczba;
cin>>liczba;
b[i]=liczba;
}
}