Szczegółowe omówienie zadania Antyplagiat 1:
Link do powyższego omówienia zadania Antyplagiat 1: https://youtu.be/nPIewnyLFMk?t=1725
Link do treści zadania Antyplagiat 1: https://szkopul.edu.pl/problemset/problem/ap1/site/
Zadanie Antyplagiat 1 jest zadaniem pokazującym zastosowanie set: https://youtu.be/JcyOLsAoL3w?t=655
Pokazuje:
- Zastosowanie funkcji getline i wczytywanie dowolnej liczby znaków:
https://youtu.be/nPIewnyLFMk?t=5007 - Własny porządek w set: https://youtu.be/JcyOLsAoL3w?t=1432
Podobnie w quizie: https://youtu.be/nPIewnyLFMk?t=6215
Mamy wczytać dowolną ilość linii (getline) i zapamiętać unikalne ich wystąpienia – pomijając białe znaki. Mamy drugi zbiór – potencjalne plagiaty z pierwszym – również z dowolną ilością linii i musimy sprawdzić czy ma jakieś identyczne linie z pierwszym zbiorem. Wypisać linie ze zbioru 2 identyczne ze zbiorem 1. Plagiaty wypisujemy raz. Wypisać trzeba w dziwnej kolejności – najpierw najdłuższe linie plagiatowe, te same długości leksykograficznie. Wczytujemy oryginalny tekst do set. Potem wczytujemy drugi zbiór. Jak ma linie ze zbioru 1 to pamiętamy w secie wynikowym. set wynikowy ma własny comperator, funkcję sortującą, porównującą.
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
Lista zadań z rozwiązaniami: https://oki.org.pl/lista-zadan-materialy.php
Samouczek – przygotowanie do Olimpiad: https://oki.org.pl/tutorial/
Zajęcia Programowanie OD PODSTAW: https://oki.org.pl/programowanie-od-podstaw/
Wszystkie zajęcia: https://oki.org.pl/harmonogram-zajec/
Informacje o zajęciach: https://oki.org.pl/newsletter.php
–
Kod C++ programu "Antyplagiat 1", który jest omówiony w powyższym filmie i który otrzymuje 100%
–
#include <iostream>
#include <string>
#include <set>
using namespace std;
void UsunBialeZnaki(string &napis_zrodlo){
int i;
string napis_bez_bialych;
napis_bez_bialych = "";
for (i=0; i<(int)napis_zrodlo.size(); ++i) {
if ( isspace( napis_zrodlo[i] ) > 0 )
continue;
//Jesli tu jestemy to literka nie jest bialym znakiem
napis_bez_bialych += napis_zrodlo[i];
}
napis_zrodlo = napis_bez_bialych;
}
bool CzyString1ZLewejStrony(const string &s1, const string &s2) {
// Jesli napisy roznej dlugosci to z lewej dluzszy
if ( s1.size() != s2.size() )
return s1.size() > s2.size();
// jesli sa rownej dlugosci to z lewej mniejszy leksykograficznie
return s1 < s2;
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
string linia;
set<string> tekst_oryginalny;
set<string, bool (*)(const string &, const string &)>
linie_plagiatow(CzyString1ZLewejStrony);
set<string>::iterator it;
getline(cin, linia); //Wczytujemy TEXT1
while ( getline(cin, linia) ) {
UsunBialeZnaki(linia);
if (linia == "TEXT2")
break;
if ( linia.size() == 0 )
continue;
tekst_oryginalny.insert(linia);
}
while ( getline(cin, linia) ) {
UsunBialeZnaki(linia);
if ( linia.size() == 0 )
continue;
if ( tekst_oryginalny.find(linia) != tekst_oryginalny.end() )
linie_plagiatow.insert(linia);
}
for (it=linie_plagiatow.begin(); it!=linie_plagiatow.end(); ++it)
cout << *it << endl;
return 0;
}
Kod C++ programu "Antyplagiat 1", który jest omówiony w powyższym filmie i który otrzymuje 100%
Komentarze na YouTubie pod tym filmem są zablokowane?
Można wrzucać omówienia.
Dziękuję Karolu za linki do poszczególnych częsci!