Omówienie zadania “Photoshoot”

Omówienie zadania Photoshoot z Amerykańskiej Olimpiady Informatycznej USACO:

https://youtu.be/ufvS-VfPDLs?t=4828


Link do zadania:
http://usaco.org/index.php?page=viewproblem2&cpid=988

Zadanie wymaga jedynie pomysłu i świetnie przygotowuje do Olimpiady Informatycznej Juniorów
Zadanie omawia Jędrzej, laureat poprzednich edycji Olimpiady Informatycznej:
który w filmie dzieli się również swoim doświadczeniem:
Poniżej kod wzorcowy do zadania użyty przez Jędrzeja
#include<bits/stdc++.h>
using namespace std;

const int N=1010;
int TablicaSum[N];
int TablicaWynikow[N];
int TablicaWystapien[N];

int Sprawdz(int n){
	int aktu;
	for(int i=1; i<=n; i++) TablicaWystapien[i]=0;
	TablicaWystapien[ TablicaWynikow[1] ]=1;
	for(int i=2; i<=n; i++){
		TablicaWynikow[i]=TablicaSum[i-1]-TablicaWynikow[i-1];
		aktu=TablicaWynikow[i];
		if( TablicaWystapien[ aktu ]==1 || aktu>n || aktu<1) return 0;
		TablicaWystapien[ aktu ]=1;
	}
	return 1;
}

int main (){
	ios_base::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
 freopen("photo.in", "r", stdin);
 freopen("photo.out", "w", stdout);
	int n;
	cin>>n;
	for(int i=1; i<n; i++) cin>>TablicaSum[i];
	for(int i=1; i<=n; i++){
		TablicaWynikow[1]=i;
		if( Sprawdz(n) ) break;
	}
	for(int i=1; i<n; i++) 
	   cout << TablicaWynikow[i] << " ";
	cout << TablicaWynikow[n];
	cout << "\n";
	return 0;
}
Photoshoot_100p_KodC++

Nie dodano jeszcze komentarza, rozpocznij dyskusję pierwszy.

Dodaj komentarz