Proponuję wstawiać tutaj najdziwniejsze nasze kody:
- takie których za cholerę żaden geniusz nie będzie w stanie zrozumieć
- które zawierają bardzo dużo operatorów
- które pozornie nie mają szans działać
- które przechodzą na Athinie
- które mogą być ciekawe, liczy się pomysłowość:)
Mogą być także ewentualnie inne pomysły rozwiązań do zadań,
które nie były omawiane na lekcji(pomysły),
a może przez nikogo wcześniej nie znane.
Żeby uniknąć sytuacji plagiatów(są osoby które nie przepchnęły niektórych zadań)
proponuję wpisywać tylko pojedyncze funkcje(w sensie fragmentów kodów)
Na początek:
Zadanie C można przepchać stosując tylko jedną funkcję wyszukiwania binarnego.
Zamiast wyszukać ostatnie wystąpienie, można znajdywać pierwszą liczbę, która jest większa o 1.
To powoduje małe problemy(t.j. pytanie o największą liczbę), ale da się spokojnie w 40 liniach.
i jedna z funkcji zadania N
int maximum(int a,int b)
{
int m=0;
if(a%2==1)
{
m=max(m,tab[a]);
a++;
}
if(b%2==0)
{
m=max(m,tab[b]);
b—;
}
if(a>b)return m;
return max(m,maximum(a/2,b/2));
}
niby jest prosta, ale niektórzy mówili że to nie może działać:D
Zadanie P można zrobić także BFSem, warto się zastanowić w jaki sposób
tutaj fragment mojej implementacji:
int magia(int f,int i)
{
return tab[f][i].z*(1-2*(int)zm[f])*(1-2*(int)zm[abs(tab[f][i].z)]);
}
Nobla dla kogoś kto zrozumie
Nieprawdopodobnie rozbudowana, straszliwie długa i niewyobrażalnie skomplikowana funkcja max z zadania N:
int find(int l, int p, int m, int tab[]) { while (l<=p) { if (tab[l]>L) L=tab[l]; if (tab[p]>P) P=tab[p]; l=(l+1)/2; p=(p-1)/2; } return L>P ? L : P; }
Zadanie R na kopcach!! :D
#include <iostream> #include <queue> using namespace std; struct liczba { int nr; }; bool operator<(liczba a, liczba b) { return a.nr>b.nr; } priority_queue <liczba> kol[100001], cel[100001], act; int main() { ios_base::sync_with_stdio(0); int D, z, n, x; cin >> D; for (int i=0; i<D; i++) { x=0; cin >> n >> z; for (int i=0; i<z; i++) { liczba a, b; cin >> a.nr >> b.nr; kol[b.nr].push(a); cel[a.nr].push(b); } for (int i=1; i<=n; i++) if (kol[i].empty()) { liczba temp; temp.nr=i; act.push(temp); } while (!act.empty()) { int bla=act.top().nr; cout << bla << " "; x++; act.pop(); while (!cel[bla].empty() && x<n) { kol[cel[bla].top().nr].pop(); if (kol[cel[bla].top().nr].empty()) act.push(cel[bla].top()); cel[bla].pop(); } } cout << endl; } }
Nie pytajcie jak to działa, bo nie pamiętam :D w każdym razie na OPSSie jest zadanie Zależności, które jest identyczne jak nasze R, tylko bez cykli i je przepchnąłem kiedyś w ten sposób ;) a sprawdzenie cykli to tylko dorobienie DFSa, którym przeleci się graf dla sprawdzenia :)
Zamiana pozwoleń w zadaniu P:
for (int j=0; j<G[G[u][i].v].size(); j++) { G[G[u][i].v][j].p^=1; if (G[G[u][i].v][j].v!=u) for (int k=0; k<G[G[G[u][i].v][j].v].size(); k++) if (G[G[G[u][i].v][j].v][k].v==G[u][i].v) G[G[G[u][i].v][j].v][k].p^=1; }
Czy tylko moje uczucie, czy to było jedno z najdurniejszych zadań od początku roku??
Mi się najtrudniejsze wydają zabawy andrzekowe. masakra:/
Dlaczego wszyscy piszą w zadaniach P oraz R DFSy?
Dlaczego one działają?
Dlaczego ja tych rozwiązań nie rozumiem?
Dlaczego nikt nie rozumie moich rozwiązań?
Wy wszyscy macie większe c od mojego!!!!