Szczegółowe omówienie zadania Test na inteligencję:
Link do powyższego omówienia zadania Test na inteligencję:
https://youtu.be/V6axb24D1dw?t=4928
https://youtu.be/V6axb24D1dw?t=4928
Link do treści zadania Test na inteligencję:
https://szkopul.edu.pl/problemset/problem/Ak4wWPkNtHpF-OiulN1gixfW/site
https://szkopul.edu.pl/problemset/problem/Ak4wWPkNtHpF-OiulN1gixfW/site
Zadanie Test na inteligencję wymaga odpowiedniego przechowywania danych (tablica wektorów) i użycia algorytmu Binary Search.
Zadanie pochodzi z I etapu Olimpiady Informatycznej Licealistów.
Wszystkie zadania z tej edycji Olimpiady:
https://szkopul.edu.pl/p/default/problemset/oi/17
Omawia Janek – uczestnik Olimpijskiego Koła Informatycznego, uczeń VIII klasy Szkoły Podstawowej w Sławnie:
https://youtu.be/V6axb24D1dw?t=6175
Bardzo dziękuję!
——–
Jak się uczyć na podstawie tego zadania?
https://youtu.be/QgLyXYmFQeU?t=2019
Pamiętaj by zajrzeć max 1 raz – wtedy się rozwijasz:
https://youtu.be/pkLXuuOe_qA?t=3625
——-
Kod C++ programu Test na inteligencję, który jest omówiony w powyższym filmie i który otrzymuje 100%
–
#include <bits/stdc++.h>
using namespace std;
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
//wejscie
int n, p;
cin>>n;
int ciag[n];
for (int i = 0; i < n; i++)
cin >> ciag[i];
int m;
cin >> m;
int n_y[m];
vector <vector <unsigned int> > zapytania(m);
for(int i = 0; i < m; i++){
cin >> p;
n_y[i] = p;
unsigned int x;
for (int w = 0; w < p; w++){
cin >> x;
zapytania[i].push_back(x);
}
}
//koniec wejscia
vector <vector <unsigned int> > indeksy(1000009);
bool podwynik;
unsigned int minimum;
for (int i = 0; i < n; i++){
indeksy[ciag[i]].push_back(i);
}
unsigned int poc = 0, k = n-1, sr, goal;
for (int i = 0; i < m; i++){
podwynik = true;
if (indeksy[zapytania[i][0]].size() > 0)
minimum = indeksy[zapytania[i][0]][0];
else
podwynik = false;
if (podwynik)
for (int w = 1; w < n_y[i]; w++){
if (indeksy[zapytania[i][w]].size() > 0){
poc = 0;
k = indeksy[zapytania[i][w]].size()-1;
if (indeksy[zapytania[i][w]].back() > minimum){
if (indeksy[zapytania[i][w]].size() > 1){
while (poc <= k){
sr = (poc+k)/2;
if (sr < 0 || sr >= indeksy[zapytania[i][w]].size()){
break;
}
if (indeksy[zapytania[i][w]][sr] <= minimum){
poc = sr+1;
}
else{
goal = sr;
k = sr-1;
}
}
minimum = indeksy[zapytania[i][w]][goal];
}else{
if(indeksy[zapytania[i][w]][0] > minimum)
minimum = indeksy[zapytania[i][w]][0];
else{
podwynik = false;
break;
}
}
}
else{
podwynik = false;
break;
}
}
else{
podwynik = false;
break;
}
}
if (podwynik)
cout << "TAK\n";
else
cout << "NIE\n";
}
return 0;
}
Link do pliku ze wzorcowym kodem C++ zadania Test na inteligencję