ATTENZIONE!!!!!!!!!!!!!!!!!!!!!!!
ci siamo trasferiti a : http://dakation.altervista.org/infoguide/
Info Guide
giovedì 7 agosto 2014
sabato 19 luglio 2014
Convertire un pdf in bianco e nero in un comando con Linux
Grazie al software opensource To Black and White potremmo convertire i nostri documenti in bianco e nero in pochi secondi:
Installiamo To Black and White:
Installiamo To Black and White:
sudo add-apt-repository ppa:dpd-/ppa -yL'utilizzo è semplice:
sudo apt-get update -y
sudo apt-get install tobw -y
tobw file.pdfE otterremo il file risultante nella stessa cartella dell'input.
Creare un pacchetto e pubblicarlo su Launchpad
Abbiamo realizzato un programma in bash, c, c++, python, gambas, .... e vogliamo pubblicarlo? ecco come si fa:
lunedì 9 giugno 2014
UEFI Secure Boot: è sicuro per noi o per loro?
Microsoft ha imposto già da tempo ai produttori di computer di venderli con UEFI attivato, ma cos'è
UEFI?
UEFI è un'alternativa al BIOS nelle schede madri che dovrebbe avere questi vantaggi:
UEFI?
UEFI è un'alternativa al BIOS nelle schede madri che dovrebbe avere questi vantaggi:
- Miglioramento della sicurezza nella fase di avvio.
- Maggiore velocità dei tempi di avvio e di ripresa dallo stato di ibernazione.
- Supporto di unità maggiori di 2,2 terabyte (TB).
- Supporto di driver di dispositivi firmware a 64 bit che il sistema può utilizzare per indirizzare più di 17,2 miliardi di gigabyte (GB) di memoria durante l'avvio.
- Possibilità di utilizzare il BIOS con hardware UEFI.Fonte: Microsoft
Il bollino traditore, simbolo della presenza di UEFI. |
Ma in pratica è una garanzia per la Microsoft dal momento in cui su una macchina UEFI puoi installare solo Windows e da Win 8 in poi; e una garanzia per i produttori di schede in quanto funzionano solo le schede certificate (il certificato è a pagamento).
Questo chiude il mondo dell' open: i sistemi open source come Linux non potranno più essere installati e molte schede open hardware non potranno essere utilizzate.
Microsoft si difende dicendo che non obbliga a usare UEFI: obbliga solo a vendere pc con UEFI attivato e che gli utenti possono disattivarlo dalle impostazioni del BIOS, ma il problema è che non in tutti i computer si può disattivare: in molti è obbligatorio!
La Free Software Foundation ha aperto una petizione contro il UEFI obbligatorio: se vuoi partecipare clicca su questo link!
Comunque Windows 8 e 8.1 si possono installare anche con UEFI disabilitato, quindi permettendo la coesistenza Win-Linux.
Per i computer con UEFI non disabilitabile si possono usare alcune versioni di Linux contenenti una chiave UEFI comprata da Matthew Garrett integrata nel loader Shim:
Comunque Windows 8 e 8.1 si possono installare anche con UEFI disabilitato, quindi permettendo la coesistenza Win-Linux.
Per i computer con UEFI non disabilitabile si possono usare alcune versioni di Linux contenenti una chiave UEFI comprata da Matthew Garrett integrata nel loader Shim:
- Ubuntu 12.10 (solo nella versione 64 bit) e Ubuntu 13.04
- Fedora 18
- Sabayon 11
- Arch Linux (vedi Wiki)
- openSUSE 12.3
- Linux Mint 15 Olivia (anche se non confermato dovrebbe supportare UEFI)
martedì 3 giugno 2014
VLC volume a 150%? portalo a 200%!
Con gli ultimi aggiornamenti di VLC non si può alzare il volume più del 125%, questo è stato pensato
per evitare distorsioni, ma quando si ascoltano canzoni a basso volume occorre alzare oltre questa soglia.
In realtà in VLC il volume si può alzare fino al 300%: basta solo impostare il livello-soglia:
Aprite VLC, andate su strumenti-> preferenze
Ora aprite la visualizzazione tutto (1), poi andate su interfaccia (2) -> Qt (3) e in fondo trovate la voce "Volume massimo visualizzato" dove (4) potete mettere la vostra soglia fino a 300. Infine salvate (5).
In realtà in VLC il volume si può alzare fino al 300%: basta solo impostare il livello-soglia:
Aprite VLC, andate su strumenti-> preferenze
Ora aprite la visualizzazione tutto (1), poi andate su interfaccia (2) -> Qt (3) e in fondo trovate la voce "Volume massimo visualizzato" dove (4) potete mettere la vostra soglia fino a 300. Infine salvate (5).
giovedì 22 maggio 2014
Storia del computer
È noto quasi a tutti che fin dalla prima metà dello scorso millennio i cinesi ebbero un particolare
interesse per la matematica e per l'automazione dei calcoli: esempi che possiamo ancora vedere ai giorni nostri sono abaco e pallottoliere; ma pochi sanno che fin dal XIX secolo si sono create macchine molto vicine ai moderni computer.
La macchina analitica di Charles Babbage ne è l'esempio per eccellenza: era una macchina, di grandi dimensioni, che permetteva di fare le principali operazioni matematiche e di visualizzarne il risultato grazie a delle ruote con impresse le dieci cifre, inoltre il progetto originale prevedeva un sistema per stampare su carta la cronologia dei calcoli effettuati, ma non furono trovati i fondi necessari a costruirla. Recentemente è stata realizzata una macchina analitica compresa di "stampante" funzionante seguendo i progetti originali e utilizzando solo materiali all'epoca conosciuti: secondo alcuni esperti, se si fossero trovati i fondi necessari, i moderni computer potrebbero aver visto luce molti anni prima.
Ada Lovelace, figlia del poeta inglese Lord Byron e anche vissuta nel XIX secolo, compì studi approfonditi sulla macchina analitica e scrisse il primo programma della storia, appunto per questa macchina: si tratta di una serie di istruzioni, scritte su schede perforate, per calcolare i numeri della serie di Bernoulli.
Per molti anni le istruzioni vennero scritte su schede perforate. Un esempio famoso ne è l'Eniac, anche per un preciso fatto: un giorno un insetto (in inglese bug) si infilò in una scheda perforata danneggiando gravemente la macchina, è per questo che oggi quando c'è un problema o un errore in un programma informatico si parla di bug.
Agli inizi dello scorso secolo Alan Turing descrisse una macchina (Macchina di Turing) che non faceva
solo determinate operazioni, ma tante quante ne erano descritte nei vari programmi: la macchina leggeva una serie di uni e di zeri che descrivevano i processi da fare.
Questo permetteva di sviluppare algoritmi per ogni tipo di problema, a patto di dover semplificare ogni problema in problemi più piccoli (ricorsione).
Durante la seconda guerra mondiale Turing fece parte del dipartimento di comunicazione inglese per decriptare i messaggi in codice tedeschi, i quali erano codificati dalla macchina Enigma: un insieme di servomotori che facevano variare continuamente il codice.
Turing inoltre inventò un test per verificare quando l'intelligenza artificiale sarebbe stata pari a quella umana: una persona pone una domanda e riceve una risposta da una persona reale e una dalla macchina, quando non saprà distinguerle allora l'intelligenza artificiale avrà raggiunto alti livelli.
È grazie a queste e a molte altre persone che oggi abbiamo tutte quelle tecnologie basate sui calcoli automatici (computer,cellulari, ma anche orologi,riscaldamento,domotica,...) e se vediamo i progressi fatti in due secoli e i progressi fatti negli ultimi dieci anni possiamo notare come ci sia una sempre più crescente evoluzione di queste tecnologie; e non solo non possiamo immaginare cosa ci sarà fra un secolo: non possiamo immaginare cosa ci sarà fra un anno!
Abaco cinese e abaco moderno |
La macchina analitica di Charles Babbage ne è l'esempio per eccellenza: era una macchina, di grandi dimensioni, che permetteva di fare le principali operazioni matematiche e di visualizzarne il risultato grazie a delle ruote con impresse le dieci cifre, inoltre il progetto originale prevedeva un sistema per stampare su carta la cronologia dei calcoli effettuati, ma non furono trovati i fondi necessari a costruirla. Recentemente è stata realizzata una macchina analitica compresa di "stampante" funzionante seguendo i progetti originali e utilizzando solo materiali all'epoca conosciuti: secondo alcuni esperti, se si fossero trovati i fondi necessari, i moderni computer potrebbero aver visto luce molti anni prima.
Macchina analitica |
Per molti anni le istruzioni vennero scritte su schede perforate. Un esempio famoso ne è l'Eniac, anche per un preciso fatto: un giorno un insetto (in inglese bug) si infilò in una scheda perforata danneggiando gravemente la macchina, è per questo che oggi quando c'è un problema o un errore in un programma informatico si parla di bug.
Agli inizi dello scorso secolo Alan Turing descrisse una macchina (Macchina di Turing) che non faceva
Versione della macchina analitica realizzata coi Lego |
Questo permetteva di sviluppare algoritmi per ogni tipo di problema, a patto di dover semplificare ogni problema in problemi più piccoli (ricorsione).
Durante la seconda guerra mondiale Turing fece parte del dipartimento di comunicazione inglese per decriptare i messaggi in codice tedeschi, i quali erano codificati dalla macchina Enigma: un insieme di servomotori che facevano variare continuamente il codice.
Turing inoltre inventò un test per verificare quando l'intelligenza artificiale sarebbe stata pari a quella umana: una persona pone una domanda e riceve una risposta da una persona reale e una dalla macchina, quando non saprà distinguerle allora l'intelligenza artificiale avrà raggiunto alti livelli.
Doodle dedicato dalla Google ad Alan Turing |
mercoledì 21 maggio 2014
Alla ricerca del prodotto giusto...
Le caratteristiche di un pc. |
del momento, alcune volte anche provarle, ma sopratutto avere una visione d' insieme di come si evolveva il mondo informatico.
Merito di tutto ciò erano le etichette curate che riportavano tutti i dettagli tecnici dei prodotti.
Dopo molti anni sono tornato in vari negozi nei reparti informatici e ho notato che purtroppo la storia è cambiata: la maggior parte dei prodotti in esposizione sono scatole, a volte trovi un' etichetta con scritta a volte la ram (la marca non il valore) o il processore e al posto dei dettagli tecnici trovi cartelli con scritto: "leggero, veloce, ergonomico, bello,..."
Purtroppo ho constatato questo anche nei siti dei produttori: solo pochi siti mantengono ancora le caratteristiche, e sono solitamente in una scheda secondaria, dopo foto e "leggero, veloce, ergonomico, bello,..."
Ora sul sito del produttore non scrivono più le caratteristiche, ma solo le "impressioni d'uso". |
I tempi sono cambiati e i computer non sono più una nicchia ma sono diventati il principale prodotto, quindi il commercio punta all' illusione e al far parere bello: chi va a comprare un computer se gli dici che ha 4 core da 2 GHz e 16GiB di ram? nessuno ma se gli dici ultrabook con superprocessore e durata eccezionale della batteria lo comprano al volo!
Anche gli schermi: perché farli lucidi? Essendo lucidi riflettono tutta la luce e diminuiscono la visibilità, mentre se fossero opachi sarebbe molto meglio; ma chi va a comprare un monitor opaco? I monitor lucidi quando sono spenti hanno un' estetica migliore e creano più guadagni.
I produttori stanno appunto attuando una strategia di commercio per vendere tutto a tutti, mettendo così in difficoltà chi sa cosa cercare, perché ormai non ti vendono il computer ma le parole.
mercoledì 14 maggio 2014
Doppia icona Chrome in Luncher o Docky?
inizio 2 icone |
Per risolvere questo problema non ci vuole molto:
risultato |
- Apri un terminale e digita
xprop | grep WM_CLASS | awk '{print $4}'
e cliccando su una finestra di Chrome otterrai qualcosa tipo: Google-chrome-stable - Nel terminale digita
sudo nautilus /usr/share/applications/ (se usi un filemanager diverso da nautilus va bene comunque)
apri google-chrome.desktop con un editor di testo come gedit e aggiungi la segunete riga:
StartupWMClass=Google-chrome-stable - Riavvia Docky o Unity
Synapse, un'alternativa alla Dash
Interfaccia di Synapse |
La dash permette di cercare app, file, musica, video,.. semplicemente scrivendo alcune lettere del nome.
Il problema più grande è che occupa molta memoria ed è poco efficiente.
Più risulatiti |
Apri con... |
Ci sono estensioni come la calcolatrice |
Con Tab scorrendo con la fraccia giù potete cambiare il programma con cui aprire i file.
INSTALLAZIONE
sudo add-apt-repository ppa:synapse-core/ppa
sudo apt-get update -y
sudo apt-get install synapse -y
martedì 13 maggio 2014
Ancora Windows?
Esistono svariati sistemi operativi, fra cui ricordiamo Windows, le miriadi di release di Linux e OSX; eppure quando ci guardiamo attorno siamo circondati da computer Windows, quindi pensiamo che Windows sia il migliore, ma invece...
Un altro fatto importante è la fine di supporto di Windows XP: in realtà si potrà continuare a usare Windows XP senza problemi, con solo due differenze:
- Non riceverete più aggiornamenti dalla Microsoft (Alleleja!)
- La Microsoft non vi darà più supporto gratuito (Prima lo faceva?)
Invece quasi tutti hanno capito che dovevano cambiare compueter (proprio quello che la Microsoft voleva), ma a discapito di questa le vendite di Windows non sono salite di molto: alcuni hanno scelto Mac (con i relativi costi da supportare), mentre altri hanno optato per Linux.
Linux? Chi è sto sconosciuto?
Ebbene si in pochi conoscono Linux ed è un peccato, scopriremo ora perchè conviene passare a Linux che comprare un nuovo Windows.
Un altro fatto importante è la fine di supporto di Windows XP: in realtà si potrà continuare a usare Windows XP senza problemi, con solo due differenze:
- Non riceverete più aggiornamenti dalla Microsoft (Alleleja!)
- La Microsoft non vi darà più supporto gratuito (Prima lo faceva?)
Invece quasi tutti hanno capito che dovevano cambiare compueter (proprio quello che la Microsoft voleva), ma a discapito di questa le vendite di Windows non sono salite di molto: alcuni hanno scelto Mac (con i relativi costi da supportare), mentre altri hanno optato per Linux.
Linux? Chi è sto sconosciuto?
Ebbene si in pochi conoscono Linux ed è un peccato, scopriremo ora perchè conviene passare a Linux che comprare un nuovo Windows.
- REQUISITI MINIMI
Windows 8.1 Linux Ubuntu
20 GiB HDD 10 GiB HDD
2 GiB Ram 512 MiB Ram (= 0,5 GiB)
1 P Processore 0,7 P Processore [P = GHz * core]
Scheda grafica DirectX 9 Scheda grafica generica
Come si può notare Linux generalmente richiede meno risorse di Windows (esistono alcune versioni come Xubuntu o Lubuntu che addirittura richiedono meno prestazioni che Ubuntu !!!).
Con questo si può riutilizzare un vecchio computer o comprarne uno poco potente abattendo notevolmente i costi. - PREZZI
Beh Windows ha calato i prezzi con l' avvento di Windows 8, mentre Linux è rimasto sempre costante nei prezzi:
(prezzi medi in data di uscita)
Windows 7 300€ Ubuntu 9.10 gratis
Windows 8.1 100€ Ubuntu 13,10 gratis - SICUREZZA
Con Win chiunque sa prendere Virus: basta non avere l' antivirus o un antivirus impreparato ( e con la velocità con cui creano nuovi virus un antivirus risulta impreparato 15 minuti prima che esca l' aggiornamento).
Con Linux solo uno stupido sa installare i virus: bisogna scaricare i file, dargli il permesso di esecuzione, fare doppio click e digitare la password di amministratore.Richiesta di password Linux
Questo in quanto Linux è un sistema a guscio: ogni livello è protetto, mentre Windows non è a guscio: dopo il primo accesso (quando accendete il computer) lascia la porta aperta, questo è comodo per chi non vuole mettere la password per ogni cosa ma è molto insicuro.
Appunto per questo si sono scoraggiati gli sviluppatori e i virus per Linux sono pochissimi. - INSTALLAZIONE
Se avete un computer vuoto i tempi di installazione sono molto diversi, riportiamo qui le medie:
Windows 50 minuti Linux 20 minuti
Guida passo passo - DRIVER
Windows per funzionare a bisogno di tutti i driver, solo con Windows 8 vengono inclusi alcuni driver fondamentali; questo comporta una perdita di tempo, un ingombro di memoria fisica (RAM) e di storage (HDD).
In Linux invece vi è incluso il 99% dei driver e appena lo installate lo potete subito usare. - TEMPI DI AVVIO E SPEGNIMENTO
Se siete utenti Windows di certo odierete gli avvii del sistema, ma con Linux i tempi si riducono
Da Windows 8 i tempi di avvio somigliano diminuiti, in realtà Win 8 e 8.1 non si spengono: chiudono tutti i programmi e si ibernano (attenzione però recuperare i dati da un HDD ibernato può causare perdite di dati). - DEFRAMMENTAZIONE
Un buon utente Win deframmenta regolarmente i suoi dischi, un buon utente Linux non sa cosa vuol dire deframmentare: scordatevi i pomeriggi lunghi ad attendere che il computer termini questo processo perchè Linux usa flesystem molto più avanzati di FAT e NTFS (unici di Win). - AGGIORNAMENTI
Su Windows bisogna aggiornare tutti i programmi manualmente e separatamente aggiornare il sistema operativo, quest' ultima procedura si compone di tre parti: attendi l' installazione degli aggiornamenti, attendi uno spegnimento molto più lungo del solito, attendi un tempoAggiornamento in un click
Su Linux compare una finestrella, con un (1) click su aggiorna e in 5 minuti (mentre fai altro) aggiorna sistema operativo e tutti i programmi e non occorre attendere altro tempo. - SOFTWARE
Su Windows il buon software è a pagamento e spesso a caro prezzo, mentreMicrosoft Office su Linux
Se siete affezionati ai software Win potete usare Wine: un programma che permette l' avvio di una buona parte degli applicativi Win su Linux.
Inoltre potete trovare tutto il software Linux su Ubuntu Software Center (simile a Windows Store di Win 8 ma uscito molti anni prima) - PERSONALIZZAZIONE
Su Windows ci sono alcune impostazioni personali e alcune personalizzazioni, su Linux puoi scegliere tutto al 100%: non solo nome e colori ma anche tantissime altre cose!!!Alcuni DE di Linux - ASSISTENZA
Hai problemi con Win? Sul sito Microsoft non trovi nulla e devi pagare un tecnico, con Linux hai miriadi di forum (il più popolare è Ubuntu Forum) con utenti che gratuitamente danno supporto 24h su 24 e 365 giorni l' anno (io ho postato un problema la mattina di Natale e in meno di 15 minuti ho ricevuto già 3 risoluzioni) - RETI
Windows in rete comunica solo con Windows ( o Linux che gli danno il permesso) e a volte fa fatica anche così. Con Linux potete comunicare con tutti i sistemi informatici (non solo computer, ma anche consolle,...).
Le aziende possono usando Linux Server gestire tutti i computer della ditta indipendentemente che essi abbiano Linux, Win o Mac, mentre con Win Server puoi gestire solo i pc con Win. - MOBILE
Un argomento importante sono i sistemi operativi per Smartphone: Windows Phone vs Linux.Linux su tutti i dispositivi
Windows Phone è uno dei sistemi mobile meno conosciuti, con un numero limitato di app (solitamente copioni di app Android e iOS) che punta all' estetica più che al software.
Dal lato Linux abbiamo Android, che si contende il podio con iOS, il cui unico punto debole è la sicurezza (Google ha scelto di abbandonare molti punti del guscio Linux a favore di un' interfaccia più semplice) e Ubuntu Phone: permette l' esecuzione delle app desktop per Linux con un interfaccia riscritta per i Touch.
Beh che dire Linux è risparmio e sicurezza, provare per credere.
Se volete potete provare Linux senza installarlo: usate il Live CD.
giovedì 10 aprile 2014
Compilare eseguibili Windows su Linux
Tempo fa avevamo visto come compilare C++ per Linux su Linux, oggi vedremo come compilare per Windows su Linux (il risultante sarà in 32bit):
inanzitutto installiamo MingW:
Poi andiamo a compilare:
inanzitutto installiamo MingW:
sudo apt-get install g++ -yNon preoccupatevi se da errore su uno dei quattro
sudo apt-get install mingw32 -y
sudo apt-get install mingw32-binutils -y
sudo apt-get install mingw32-runtime -y
Poi andiamo a compilare:
i586-mingw32msvc-g++ sorgente.cpp -o compilato.exe
Tutti i caratteri con Linux
Ecco un semplice schema esemplificativo di come fare tutti i caratteri con Linux (schema relativo alla tastiera italiana):
Ricordo che è inoltre possibile inserire direttamente il codice Unicode del carattere:
Ctrl+Shift+u seguito dal codice
mercoledì 9 aprile 2014
Indice di un processore in Pantal
Le caratteristiche principali di un processore son la velocità (operazioni al secondo) e il numero di sottoprocessori (core).
Il pantal [P] è un' unità di misura che li raggruppa in un unico dato.
Sapendo il pantal di un processore è facile stimarne le caratteristiche:
dividendo il numero di pantal per due (che sono i GHz medi di un processore attuale) si ottiene all' incirca il numero di core; sapendo che il numero di core è una potenza di due si arrotonda tale numero e di conseguenza si calcolano i GHz, per esempio:
un processore da 7 P
7 P : 2 GHz = 3,5 core -> 4 core
7 P : 4 core = 1,75 GHz
Ecco alcuni valori di pantal:
processore GHZ core Pantal
Intel i3-4000M 2,40 2 4,8
Intel i7-4810MQ 2,80 4 11,2
AMD Athlon II 2,30 2 4,6
Il pantal [P] è un' unità di misura che li raggruppa in un unico dato.
Pantal = core x GHz
Sapendo il pantal di un processore è facile stimarne le caratteristiche:
dividendo il numero di pantal per due (che sono i GHz medi di un processore attuale) si ottiene all' incirca il numero di core; sapendo che il numero di core è una potenza di due si arrotonda tale numero e di conseguenza si calcolano i GHz, per esempio:
un processore da 7 P
7 P : 2 GHz = 3,5 core -> 4 core
7 P : 4 core = 1,75 GHz
Ecco alcuni valori di pantal:
processore GHZ core Pantal
Intel i3-4000M 2,40 2 4,8
Intel i7-4810MQ 2,80 4 11,2
AMD Athlon II 2,30 2 4,6
martedì 1 aprile 2014
[C++] Eserciti Galattici
L'esercito della Signoria è riuscito a costruire un'arma segreta: il temibile Sarcofago Nero. Esso legge una parola segreta S costituita da lettere minuscole dell'alfabeto: a, b, c, ..., z (ogni lettera può comparire zero, una o più volte).
Il Sarcofago Nero può assumere N configurazioni al suo interno, numerate da 1 a N. La parola segreta viene accettata se raggiunge la configurazione finale (avente numero N) a partire dalla configurazione iniziale (avente numero 1) dopo aver letto tutte le lettere in S una alla volta. Per ogni configurazione I del Sarcofago Nero, la tripletta (I,J,c) indica che la lettera c lo fa transitare dalla configurazione I alla configurazione J.
L'esercito rivale ha carpito una parola segreta S, ma non sa se è quella del Sarcofago Nero. Il tuo compito è quello di trovare la configurazione interna Q che esso raggiunge, dopo aver letto S, a partire dalla configurazione iniziale.
Dati di input
Il file input.txt è composto da M+2 righe. La prima riga contiene tre interi positivi separati da uno
spazio, che rappresentano il numero M delle triplette, il numero N di configurazioni e il numero K di
lettere nella sequenza S. La seconda riga contiene K lettere separate da uno spazio, le quali formano la
sequenza S. Ciascuna delle rimanenti M righe contiene due interi positivi I e J e una lettera c, separati da una spazio, che rappresentano la tripletta (I,J,c) per la transizione del Sarcofago Nero.
Dati di output
Il file output.txt è composto da una sola riga contenente il numero Q della configurazione raggiunta
dal Sarcofago Nero a partire dalla sua configurazione iniziale (avente numero 1), dopo aver letto tutta la
sequenza S.
Assunzioni
2 ≤ M ≤ 100.
2 ≤ N ≤ 100.
2 ≤ K ≤ 10.
1 ≤ Q ≤ N.
Esempi di input/output
File input.txt File output.txt
5 3 6 2
a a a b a b
1 3 a
1 2 b
2 1 a
3 2 b
3 3 a
Niente di più facile che modificare una variabile <Q> in base alle istruzioni memorizzate in un vettore trami te coppi char-int:
Il Sarcofago Nero può assumere N configurazioni al suo interno, numerate da 1 a N. La parola segreta viene accettata se raggiunge la configurazione finale (avente numero N) a partire dalla configurazione iniziale (avente numero 1) dopo aver letto tutte le lettere in S una alla volta. Per ogni configurazione I del Sarcofago Nero, la tripletta (I,J,c) indica che la lettera c lo fa transitare dalla configurazione I alla configurazione J.
L'esercito rivale ha carpito una parola segreta S, ma non sa se è quella del Sarcofago Nero. Il tuo compito è quello di trovare la configurazione interna Q che esso raggiunge, dopo aver letto S, a partire dalla configurazione iniziale.
Dati di input
Il file input.txt è composto da M+2 righe. La prima riga contiene tre interi positivi separati da uno
spazio, che rappresentano il numero M delle triplette, il numero N di configurazioni e il numero K di
lettere nella sequenza S. La seconda riga contiene K lettere separate da uno spazio, le quali formano la
sequenza S. Ciascuna delle rimanenti M righe contiene due interi positivi I e J e una lettera c, separati da una spazio, che rappresentano la tripletta (I,J,c) per la transizione del Sarcofago Nero.
Dati di output
Il file output.txt è composto da una sola riga contenente il numero Q della configurazione raggiunta
dal Sarcofago Nero a partire dalla sua configurazione iniziale (avente numero 1), dopo aver letto tutta la
sequenza S.
Assunzioni
2 ≤ M ≤ 100.
2 ≤ N ≤ 100.
2 ≤ K ≤ 10.
1 ≤ Q ≤ N.
Esempi di input/output
File input.txt File output.txt
5 3 6 2
a a a b a b
1 3 a
1 2 b
2 1 a
3 2 b
3 3 a
Niente di più facile che modificare una variabile <Q> in base alle istruzioni memorizzate in un vettore trami te coppi char-int:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | #include<cstdlib> #include<iostream> #include<fstream> #include<vector> #define K 10 #define N 100 using namespace std; ifstream in; ofstream out; typedef pair<char,int> ci; int m,n,k,q=1,t1,t2; char s[K],t3; vector<ci> ijc [N+1]; int main(){ in.open("input.txt"); out.open("output.txt"); in>>m>>n>>k; for (int i=0;i<k;i++) in>>s[i]; for (int i=0;i<m;i++){ in>>t1>>t2>>t3; ijc[t1].push_back(ci(t3,t2));} for (int i=0;i<k;i++) for (int j=0; j< ijc[q].size();j++) if (ijc[q][j].first ==s[i]) q= ijc[q][j].second; out<<q; return 0;} |
[C++] Nanga
Durante la lunga scalata delle cime attorno al Nanga Parbat, Reinhold Messner riesce a trasmettere al
campo base, a intervalli regolari, solo il dislivello percorso rispetto all'ultima trasmissione. Se invia un
numero positivo P, allora è salito di P metri rispetto alla precedente trasmissione; se invia un numero
negativo P, allora è sceso di P metri rispetto alla precedente trasmissione; se infine invia P=0, non ha
cambiato altitudine. Messner parte dal campo base a 5000 metri.
I suoi collaboratori al campo base ricevono tali rilevamenti: aiutali a identificare l'altitudine che risulta
più frequentemente rilevata in questo modo.
Dati di input
Il file input.txt è composto da N+1 righe. La prima riga contiene l'intero positivo N, il numero dei
rilevamenti trasmessi da Messner. Ciascuna delle successive N righe contiene un intero che rappresenta
il dislivello percorso rispetto alla precedente trasmissione.
Dati di output
Il file output.txt è composto da una sola riga contenente l'altitudine che risulta più frequentemente
rilevata in questo modo dal campo base.
Assunzioni
2 ≤ N ≤ 1000.
100 ≤ P ≤ 100.
Esempi di input/output
File input.txt File output.txt
8 5002
3
-1
6
-7
1
4
0
-4
Registriamo i risultati su un vettore, poi cercheremo il massimo:
campo base, a intervalli regolari, solo il dislivello percorso rispetto all'ultima trasmissione. Se invia un
numero positivo P, allora è salito di P metri rispetto alla precedente trasmissione; se invia un numero
negativo P, allora è sceso di P metri rispetto alla precedente trasmissione; se infine invia P=0, non ha
cambiato altitudine. Messner parte dal campo base a 5000 metri.
I suoi collaboratori al campo base ricevono tali rilevamenti: aiutali a identificare l'altitudine che risulta
più frequentemente rilevata in questo modo.
Dati di input
Il file input.txt è composto da N+1 righe. La prima riga contiene l'intero positivo N, il numero dei
rilevamenti trasmessi da Messner. Ciascuna delle successive N righe contiene un intero che rappresenta
il dislivello percorso rispetto alla precedente trasmissione.
Dati di output
Il file output.txt è composto da una sola riga contenente l'altitudine che risulta più frequentemente
rilevata in questo modo dal campo base.
Assunzioni
2 ≤ N ≤ 1000.
100 ≤ P ≤ 100.
Esempi di input/output
File input.txt File output.txt
8 5002
3
-1
6
-7
1
4
0
-4
Registriamo i risultati su un vettore, poi cercheremo il massimo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | #include<cstdlib> #include<iostream> #include<fstream> #define base 5000 //metri #define N 10000 #define no -1 using namespace std; ifstream in; ofstream out; int n,t,h=base,a[N][2],l=0,maxn=0,maxi; int cerca (int k){ for (int i=0;i<l;i++) if (a[i][0]==k) return i; return no;} int main(){ in.open("input.txt"); out.open("output.txt"); in>>n; for (int i=0;i<n;i++){ in>>t; h+=t; t=cerca(h); if (t==no){ a[l][0]=h; a[l++][1]=1; }else a[t][1]++; } for (int i=0;i<l;i++) if (a[i][1]>maxn){ maxn =a[i][1]; maxi=a[i][0];} out<<maxi; return 0;} |
[C++] Domino
Sono date N tessere di domino, dove ogni tessera contiene due numeri compresi da 0 a 6 in
corrispondenza delle sue due estremità. Le tessere possono essere ruotate e la regola impone che due
tessere possono essere concatenate se le loro estremità in contatto hanno inciso lo stesso numero. Aiuta a
trovare il maggior numero di tessere che si possono concatenare a formare un'unica catena: non è detto
che si riescano sempre a usare tutte le tessere; inoltre, possono esserci due o più tessere uguali a meno di
rotazioni.
Dati di input
Il file input.txt è composto da N+1 righe. La prima riga contiene l'intero positivo N, il numero delle
tessere a disposizione. Ciascuna delle successive N righe contiene due interi positivi (compresi da 0 a 6)
separati da una spazio, che rappresentano i numeri incisi sulle estremità delle tessere.
Dati di output
Il file output.txt è composto da una sola riga contenente il massimo numero di tessere che possono
essere concatenate con le regole del domino.
Assunzioni
2 ≤ N ≤ 10.
Esempi di input/output
File input.txt File output.txt
6 5
3 0
4 0
2 6
4 4
0 1
1 0
Il risultato è dato dalla somma delle metà di tutte le somme di presenze di un numero meno 1:
corrispondenza delle sue due estremità. Le tessere possono essere ruotate e la regola impone che due
tessere possono essere concatenate se le loro estremità in contatto hanno inciso lo stesso numero. Aiuta a
trovare il maggior numero di tessere che si possono concatenare a formare un'unica catena: non è detto
che si riescano sempre a usare tutte le tessere; inoltre, possono esserci due o più tessere uguali a meno di
rotazioni.
Dati di input
Il file input.txt è composto da N+1 righe. La prima riga contiene l'intero positivo N, il numero delle
tessere a disposizione. Ciascuna delle successive N righe contiene due interi positivi (compresi da 0 a 6)
separati da una spazio, che rappresentano i numeri incisi sulle estremità delle tessere.
Dati di output
Il file output.txt è composto da una sola riga contenente il massimo numero di tessere che possono
essere concatenate con le regole del domino.
Assunzioni
2 ≤ N ≤ 10.
Esempi di input/output
File input.txt File output.txt
6 5
3 0
4 0
2 6
4 4
0 1
1 0
Il risultato è dato dalla somma delle metà di tutte le somme di presenze di un numero meno 1:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | #include<cstdlib> #include<iostream> #include<fstream> #include<cstring> #define N 10 using namespace std; ifstream in; ofstream out; int n, t1,t2,v[7],tes=1; int main(){ in.open("input.txt"); out.open("output.txt"); in>>n; memset(v,0,7); for (int i=0; i<n;i++){ in>>t1>>t2; v[t1]++; v[t2]++; } for (int i=0;i<7;i++){ if (v[i]%2==1) v[i]--; tes+=v[i]/2;} out<<tes; return 0;} |
[C++] Trovaparola
Luciano, patito di giochi di
tutti i tipi, ha ideato un nuovo gioco, che funziona nel modo seguente: avete una
griglia di caratteri e una parola da trovare nella griglia, partendo dalla cella in alto a
sinistra. Le uniche mosse consentite sono gli spostamenti a destra o in basso. Ad
esempio, considerate la seguente griglia e la parola “olimpiadi”:
O L I V E N T
G Q M P W E R
G T R I A Y E
I U I C D P E
A F C O I G H
J K X C V R S
R O M I T A A
S T A N L E E
In questo caso, la sequenza di spostamenti è “DDBDBDBB”, rappresentando gli
spostamenti a destra con il carattere D e quelli in basso con il carattere B. Non esiste
nessuna soluzione, invece, se la parola da cercare è “olimpionico”. Il vostro compito
consiste nello scrivere un programma che, ricevute in ingresso una parola (da cercare)
e una griglia, restituisca la sequenza di spostamenti, qualora esista una soluzione,
oppure stampi “ASSENTE”. Se dovessero esistere molteplici sequenze di spostamenti
corrette, è sufficiente stamparne una qualunque.
Dati di input
Il file input.txt è composto da 2+R righe. La prima riga contiene due interi positivi R e
C: le dimensioni della griglia, ovvero il numero di righe R e il numero di colonne C.
La riga successiva contiene P, una parola da cercare, rappresentata da una stringa
lunga almeno 2 caratteri (alfabetici maiuscoli) e al massimo R+C1 caratteri. Le
rimanenti R righe del file contengono le righe della griglia, rappresentate da stringhe
di C caratteri alfabetici maiuscoli.
Dati di output
Il file output.txt è composto da una sola riga contenente una stringa di testo: la
sequenza di spostamenti necessari per trovare la parola nella griglia, se la parola è
presente, oppure la stringa “ASSENTE” (senza le virgolette).
Assunzioni
• 2 ≤ R, C ≤ 100
Esempi di input/output
File input.txt File output.txt
8 7 DDBDBDBB
OLIMPIADI
OLIVENT
GQMPWER
GTRIAYE
IUICDPE
AFCOIGH
JKXCVRS
ROMITAA
STANLEE
File input.txt File output.txt
8 7 ASSENTE
OLIMPIONICO
OLIVENT
GQMPWER
GTRIAYE
IUICDPE
AFCOIGH
JKXCVRS
ROMITAA
STANLEE
Basta provare ad andare a destra e a sinistra con una funzione ricorsiva, arrivati alla fine si stampano i passaggi:
tutti i tipi, ha ideato un nuovo gioco, che funziona nel modo seguente: avete una
griglia di caratteri e una parola da trovare nella griglia, partendo dalla cella in alto a
sinistra. Le uniche mosse consentite sono gli spostamenti a destra o in basso. Ad
esempio, considerate la seguente griglia e la parola “olimpiadi”:
O L I V E N T
G Q M P W E R
G T R I A Y E
I U I C D P E
A F C O I G H
J K X C V R S
R O M I T A A
S T A N L E E
In questo caso, la sequenza di spostamenti è “DDBDBDBB”, rappresentando gli
spostamenti a destra con il carattere D e quelli in basso con il carattere B. Non esiste
nessuna soluzione, invece, se la parola da cercare è “olimpionico”. Il vostro compito
consiste nello scrivere un programma che, ricevute in ingresso una parola (da cercare)
e una griglia, restituisca la sequenza di spostamenti, qualora esista una soluzione,
oppure stampi “ASSENTE”. Se dovessero esistere molteplici sequenze di spostamenti
corrette, è sufficiente stamparne una qualunque.
Dati di input
Il file input.txt è composto da 2+R righe. La prima riga contiene due interi positivi R e
C: le dimensioni della griglia, ovvero il numero di righe R e il numero di colonne C.
La riga successiva contiene P, una parola da cercare, rappresentata da una stringa
lunga almeno 2 caratteri (alfabetici maiuscoli) e al massimo R+C1 caratteri. Le
rimanenti R righe del file contengono le righe della griglia, rappresentate da stringhe
di C caratteri alfabetici maiuscoli.
Dati di output
Il file output.txt è composto da una sola riga contenente una stringa di testo: la
sequenza di spostamenti necessari per trovare la parola nella griglia, se la parola è
presente, oppure la stringa “ASSENTE” (senza le virgolette).
Assunzioni
• 2 ≤ R, C ≤ 100
Esempi di input/output
File input.txt File output.txt
8 7 DDBDBDBB
OLIMPIADI
OLIVENT
GQMPWER
GTRIAYE
IUICDPE
AFCOIGH
JKXCVRS
ROMITAA
STANLEE
File input.txt File output.txt
8 7 ASSENTE
OLIMPIONICO
OLIVENT
GQMPWER
GTRIAYE
IUICDPE
AFCOIGH
JKXCVRS
ROMITAA
STANLEE
Basta provare ad andare a destra e a sinistra con una funzione ricorsiva, arrivati alla fine si stampano i passaggi:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | #include<cstdlib> #include<iostream> #include<fstream> #include <string> #define M 101 #define no "ASSENTE" using namespace std; ifstream in; ofstream out; bool t=true; int r,c; string p; char g [M][M]; void cerca(int rr, int cc,string storia,int ch){ //prova a cercare la parola. Se non trova si ferma. Se trova stampa if ( ++ch == p.length()){ out<<storia; t=false; return;} if (r>rr+1 && g [rr+1][cc]==p[ch]) cerca (rr+1,cc,storia+"B",ch); if (c>cc+1 && g [rr][cc+1]==p[ch]) cerca (rr,cc+1,storia+"D",ch); return; } int main(){ in.open("input.txt"); out.open("output.txt"); in>>r>>c>>p; for (int i=0;i<r;i++) for (int j=0;j<c;j++) in>> g[i][j]; if (p[0]==g[0][0]) cerca (0,0,"",0); if (t) out<<no; return 0;} |
[C++] Gardaland
Nel 2012 le Olimpiadi Internazionali di Informatica (IOI) si sono svolte,
per la prima volta, in Italia, a Sirmione. Come da tradizione, nella
giornata tra le due gare i concorrenti sono andati a divertirsi in un parco
giochi, in questo caso, Gardaland. La mattina di quel giorno decine di
pullman hanno prelevato i quattro ragazzi che costituiscono la squadra
olimpica di ciascuna nazione dal Garda Village, dove erano stati
alloggiati, e li hanno portati a Gardaland. Come sempre negli
spostamenti, le varie nazioni erano state ripartite a blocco unico tra i
pullman, ossia tutti gli atleti di una stessa nazione trovavano posto su
uno stesso pullman. Per esempio, sul pullman dell’Italia viaggiavano
anche Giappone, Israele e Irlanda. Al ritorno però, come sempre
succede alle IOI, dopo una giornata in un parco giochi i ragazzi hanno
fatto amicizia tra di loro, e al momento di tornare sui pullman sono saliti
alla rinfusa. Grazie al lavoro delle guide, per ogni pullman è stata stilata
una lista contenente, per ogni nazione, il numero di ragazzi a bordo. Il
vostro compito è quello di aiutare Monica, responsabile
dell’organizzazione, a capire se i pullman possono partire, ovvero se
tutti i quattro ragazzi di ogni nazione che sono arrivati a Gardaland
sono saliti sui pullman. In caso contrario, dovete segnalare a Monica in
quanti mancano all’appello, divisi per nazioni.
Dati di input
Il file input.txt è composto da 1+N+L righe. La prima riga contiene due
interi positivi separati da uno spazio: il numero N delle nazioni e il
numero L di righe contenenti informazioni su chi è attualmente già
salito sui pullman. (Ciascuna nazione verrà qui rappresentata con un
intero compreso tra 0 e N1). Ognuna delle successive N righe
contiene un intero positivo: nella riga i+1 (con i >= 1) troviamo il numero
totale di ragazzi della nazione i1. Ciascuna delle rimanenti L righe
contiene due interi positivi: un intero compreso tra 0 e N1 che
rappresenta la nazione, e un intero positivo che specifica quanti ragazzi
di quella nazione sono su un certo pullman. Ovviamente una stessa
nazione può comparire diverse volte nelle L righe, e più precisamente
compare su tante righe quanti sono i pullman ospitanti atleti di quella
nazione.
Dati di output
Il file output.txt è composto da una sola riga contenente l’intero 0 (zero)
se non manca alcun ragazzo. Altrimenti, il file contiene 1+C righe: la
prima riga contiene un intero C, ovvero il numero di nazioni che hanno
ragazzi ancora a Gardaland. Le restanti C righe contengono due interi:
l’identificativo della nazione e il numero di ragazzi di quella nazione che
non sono ancora saliti su alcun pullman. E’ necessario stampare le
nazioni nell’ordine in cui sono state lette, ovvero in ordine crescente in
base all’identificativo.
Assunzioni
2 ≤ N ≤ 100
N ≤ L ≤ 1000
Contrariamente alle olimpiadi di informatica reali, dove gareggiano (massimo) 4 ragazzi per ogni nazione, nei casi di input si assume che ogni nazione abbia al massimo 100 ragazzi, e almeno 1 ragazzo.
Quindi, indicando con Ri il numero
di ragazzi della iesima nazione, vale sempre 1 ≤ Ri ≤ 100.
Esempi di input/output
File input.txt File output.txt
3 5 2
4 0 1
4 2 1
3
0 2
1 3
0 1
2 2
1 1
File input.txt File output.txt
3 6 0
4
4
4
0 2
1 3
2 1
0 2
2 3
1 1
Basta contare quanti ragazzi non sono sugli autobus:
per la prima volta, in Italia, a Sirmione. Come da tradizione, nella
giornata tra le due gare i concorrenti sono andati a divertirsi in un parco
giochi, in questo caso, Gardaland. La mattina di quel giorno decine di
pullman hanno prelevato i quattro ragazzi che costituiscono la squadra
olimpica di ciascuna nazione dal Garda Village, dove erano stati
alloggiati, e li hanno portati a Gardaland. Come sempre negli
spostamenti, le varie nazioni erano state ripartite a blocco unico tra i
pullman, ossia tutti gli atleti di una stessa nazione trovavano posto su
uno stesso pullman. Per esempio, sul pullman dell’Italia viaggiavano
anche Giappone, Israele e Irlanda. Al ritorno però, come sempre
succede alle IOI, dopo una giornata in un parco giochi i ragazzi hanno
fatto amicizia tra di loro, e al momento di tornare sui pullman sono saliti
alla rinfusa. Grazie al lavoro delle guide, per ogni pullman è stata stilata
una lista contenente, per ogni nazione, il numero di ragazzi a bordo. Il
vostro compito è quello di aiutare Monica, responsabile
dell’organizzazione, a capire se i pullman possono partire, ovvero se
tutti i quattro ragazzi di ogni nazione che sono arrivati a Gardaland
sono saliti sui pullman. In caso contrario, dovete segnalare a Monica in
quanti mancano all’appello, divisi per nazioni.
Dati di input
Il file input.txt è composto da 1+N+L righe. La prima riga contiene due
interi positivi separati da uno spazio: il numero N delle nazioni e il
numero L di righe contenenti informazioni su chi è attualmente già
salito sui pullman. (Ciascuna nazione verrà qui rappresentata con un
intero compreso tra 0 e N1). Ognuna delle successive N righe
contiene un intero positivo: nella riga i+1 (con i >= 1) troviamo il numero
totale di ragazzi della nazione i1. Ciascuna delle rimanenti L righe
contiene due interi positivi: un intero compreso tra 0 e N1 che
rappresenta la nazione, e un intero positivo che specifica quanti ragazzi
di quella nazione sono su un certo pullman. Ovviamente una stessa
nazione può comparire diverse volte nelle L righe, e più precisamente
compare su tante righe quanti sono i pullman ospitanti atleti di quella
nazione.
Dati di output
Il file output.txt è composto da una sola riga contenente l’intero 0 (zero)
se non manca alcun ragazzo. Altrimenti, il file contiene 1+C righe: la
prima riga contiene un intero C, ovvero il numero di nazioni che hanno
ragazzi ancora a Gardaland. Le restanti C righe contengono due interi:
l’identificativo della nazione e il numero di ragazzi di quella nazione che
non sono ancora saliti su alcun pullman. E’ necessario stampare le
nazioni nell’ordine in cui sono state lette, ovvero in ordine crescente in
base all’identificativo.
Assunzioni
2 ≤ N ≤ 100
N ≤ L ≤ 1000
Contrariamente alle olimpiadi di informatica reali, dove gareggiano (massimo) 4 ragazzi per ogni nazione, nei casi di input si assume che ogni nazione abbia al massimo 100 ragazzi, e almeno 1 ragazzo.
Quindi, indicando con Ri il numero
di ragazzi della iesima nazione, vale sempre 1 ≤ Ri ≤ 100.
Esempi di input/output
File input.txt File output.txt
3 5 2
4 0 1
4 2 1
3
0 2
1 3
0 1
2 2
1 1
File input.txt File output.txt
3 6 0
4
4
4
0 2
1 3
2 1
0 2
2 3
1 1
Basta contare quanti ragazzi non sono sugli autobus:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | #include<cstdlib> #include<iostream> #include<fstream> using namespace std; ifstream in; ofstream out; int n,l,t1,t2,persi=0; int main(){ in.open("input.txt"); out.open("output.txt"); in>>n>>l; int rag[n]; for (int i=0;i<n;i++) in>>rag[i]; for (int i=0;i<l;i++){ in>>t1>>t2; rag[t1]-=t2; } for (int i=0;i<n;i++) if(rag[i]>0) persi++; out<<persi; for (int i=0;i<n;i++) if(rag[i]>0) out<<"\n"<<i<<" "<<rag[i]; return 0;} |
[C++] Brisbane
Nel 2013, le IOI si svolgeranno a Brisbane (in Australia). La rappresentativa italiana
ha già iniziato a studiare la città, per capire cosa ci sia di interessante da vedere, e
come ci si possa spostare nella giornata libera successiva alla seconda gara delle
Olimpiadi. L’offerta di trasporto pubblico a Brisbane è abbastanza variegata: ci sono
due linee di bus, di cui una gratuita che gira intorno alla città, e due linee di traghetti
che fermano in diversi punti del fiume Brisbane, che taglia la città in due; per quello
che riguarda i prezzi, esiste un abbonamento giornaliero a tutti i trasporti pubblici,
bus e traghetti insieme, oppure è possibile prendere un più economico abbonamento
giornaliero ai soli traghetti, o un ancor più economico abbonamento ai soli bus.
La squadra italiana vorrà visitare il maggior numero di attrazioni possibile e per
questo motivo Monica, la responsabile dell’organizzazione, ha deciso di cercare un
buon compromesso tra il prezzo dei biglietti e le attrazioni che sarà possibile
raggiungere partendo dall’hotel. Data una lista di attrazioni e la mappa dei
collegamenti delle diverse linee del trasporto pubblico, il vostro compito è quello di
aiutare Monica a capire quante attrazioni sono raggiungibili per ogni possibile scelta
dei biglietti per i trasporti pubblici.
Per esempio, possiamo fare riferimento alla figura qui a destra, dove ad ogni fermata è
associato un cerchio (o un quadrato nel caso di luogo di attrazione) e i collegamenti
sono:
tratteggiati – collegamenti gratuiti (bus gratuiti e brevi percorsi a piedi);
rossi – bus a pagamento;
gialli – traghetto.
Il punto di partenza della rappresentativa italiana è la fermata numero 0; le attrazioni
da vedere sono quelle rappresentate con un quadrato, numerate rispettivamente 8, 12,
15, 22 e 28. Come si può vedere, spostandosi con i mezzi gratuiti si raggiungono solo
due attrazioni (la numero 8 e la numero 14); comprando il biglietto del bus si
raggiungono tutte le attrazioni; comprando il biglietto del traghetto si raggiungono,
oltre alla 8 e la 14, anche la 12 e la 15 per un totale di quattro attrazioni. Il biglietto
combinato, in questo caso, raggiunge tutte le attrazioni.
Dati di input
Il file input.txt è composto da 1+A+Mg+Mb+Mt righe. La prima riga contiene cinque
interi positivi separati da uno spazio, che rappresentano il numero N delle fermate, il
numero A di attrazioni, il numero Mg dei collegamenti gratuiti, il numero Mb dei
collegamenti via bus e il numero Mt dei collegamenti via traghetto. Ogni fermata è
rappresentata da un intero compreso tra 0 e N1. Le successive A righe contengono
ognuna una fermata (un intero compreso tra 0 e N1) corrispondente ad una delle
attrazioni che la rappresentativa italiana può visitare. Ognuna delle successive
Mg+Mb+Mt righe contiene un collegamento del trasporto pubblico, rappresentato da
due interi positivi: le fermate collegate. Le prime Mg righe contengono i collegamenti
gratuiti (bus gratuiti e brevi percorsi a piedi), poi le successive Mb contengono i
collegamenti del bus a pagamento e infine le ultime Mt righe contengono i
collegamenti dei traghetti. Il punto di partenza della rappresentativa italiana è la
sempre la fermata numero 0.
Dati di output
Il file output.txt è composto da 4 righe contenenti ognuna un intero non negativo,
rispettivamente, il numero di attrazioni raggiungibili:
1. senza comprare biglietti (solo con mezzi gratis);
2. comprando solo il biglietto giornaliero dei bus;
3. comprando solo il biglietto giornaliero dei traghetti;
4. comprando entrambe le tipologie di biglietti.
Assunzioni
• 2 ≤ N ≤ 1000
• N ≤ Mg+Mb+Mt ≤ 10000
Esempi di input/output
Qui bisogna scrivere le città nei grafi {gratis, col bus, col treno, tutti} e contare per ogni grafo quante tappe si possono raggiungere.
ha già iniziato a studiare la città, per capire cosa ci sia di interessante da vedere, e
come ci si possa spostare nella giornata libera successiva alla seconda gara delle
Olimpiadi. L’offerta di trasporto pubblico a Brisbane è abbastanza variegata: ci sono
due linee di bus, di cui una gratuita che gira intorno alla città, e due linee di traghetti
che fermano in diversi punti del fiume Brisbane, che taglia la città in due; per quello
che riguarda i prezzi, esiste un abbonamento giornaliero a tutti i trasporti pubblici,
bus e traghetti insieme, oppure è possibile prendere un più economico abbonamento
giornaliero ai soli traghetti, o un ancor più economico abbonamento ai soli bus.
La squadra italiana vorrà visitare il maggior numero di attrazioni possibile e per
questo motivo Monica, la responsabile dell’organizzazione, ha deciso di cercare un
buon compromesso tra il prezzo dei biglietti e le attrazioni che sarà possibile
raggiungere partendo dall’hotel. Data una lista di attrazioni e la mappa dei
collegamenti delle diverse linee del trasporto pubblico, il vostro compito è quello di
aiutare Monica a capire quante attrazioni sono raggiungibili per ogni possibile scelta
dei biglietti per i trasporti pubblici.
Per esempio, possiamo fare riferimento alla figura qui a destra, dove ad ogni fermata è
associato un cerchio (o un quadrato nel caso di luogo di attrazione) e i collegamenti
sono:
tratteggiati – collegamenti gratuiti (bus gratuiti e brevi percorsi a piedi);
rossi – bus a pagamento;
gialli – traghetto.
Il punto di partenza della rappresentativa italiana è la fermata numero 0; le attrazioni
da vedere sono quelle rappresentate con un quadrato, numerate rispettivamente 8, 12,
15, 22 e 28. Come si può vedere, spostandosi con i mezzi gratuiti si raggiungono solo
due attrazioni (la numero 8 e la numero 14); comprando il biglietto del bus si
raggiungono tutte le attrazioni; comprando il biglietto del traghetto si raggiungono,
oltre alla 8 e la 14, anche la 12 e la 15 per un totale di quattro attrazioni. Il biglietto
combinato, in questo caso, raggiunge tutte le attrazioni.
Dati di input
Il file input.txt è composto da 1+A+Mg+Mb+Mt righe. La prima riga contiene cinque
interi positivi separati da uno spazio, che rappresentano il numero N delle fermate, il
numero A di attrazioni, il numero Mg dei collegamenti gratuiti, il numero Mb dei
collegamenti via bus e il numero Mt dei collegamenti via traghetto. Ogni fermata è
rappresentata da un intero compreso tra 0 e N1. Le successive A righe contengono
ognuna una fermata (un intero compreso tra 0 e N1) corrispondente ad una delle
attrazioni che la rappresentativa italiana può visitare. Ognuna delle successive
Mg+Mb+Mt righe contiene un collegamento del trasporto pubblico, rappresentato da
due interi positivi: le fermate collegate. Le prime Mg righe contengono i collegamenti
gratuiti (bus gratuiti e brevi percorsi a piedi), poi le successive Mb contengono i
collegamenti del bus a pagamento e infine le ultime Mt righe contengono i
collegamenti dei traghetti. Il punto di partenza della rappresentativa italiana è la
sempre la fermata numero 0.
Dati di output
Il file output.txt è composto da 4 righe contenenti ognuna un intero non negativo,
rispettivamente, il numero di attrazioni raggiungibili:
1. senza comprare biglietti (solo con mezzi gratis);
2. comprando solo il biglietto giornaliero dei bus;
3. comprando solo il biglietto giornaliero dei traghetti;
4. comprando entrambe le tipologie di biglietti.
Assunzioni
• 2 ≤ N ≤ 1000
• N ≤ Mg+Mb+Mt ≤ 10000
Esempi di input/output
File input.txt File output.txt 6 2 2 4 2 1 1 1 5 2 0 1 2 2 5 0 3 1 3 2 4 4 5 1 2 3 4 1 File input.txt (corrisponde alla figura) File output.txt 30 5 18 14 11 2 8 5 12 4 15 5 22 28 0 5 0 24 1 8 1 25 2 3 2 23 5 11 8 14 11 16 13 17 14 19 16 20 18 22 19 21 20 22 21 22 23 24 23 25 1 4 2 28 2 29 4 7 4 8 7 29 12 26 14 15 15 19 15 21 17 21 18 21 26 27 27 28 3 7 3 25 6 9 6 13 7 15 9 10 10 17 12 16 12 18 13 15 17 18
Qui bisogna scrivere le città nei grafi {gratis, col bus, col treno, tutti} e contare per ogni grafo quante tappe si possono raggiungere.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 | #include<cstdlib> #include<iostream> #include<fstream> #include<vector> #include<algorithm> #include<cstring> #define M 10000 using namespace std; ifstream in; ofstream out; int n,a,cg,cb,ct,t1,t2,tg=0,tb=0,tt=0,tc=0; vector<int> vg[M]; vector<int> vb[M]; vector<int> vt[M]; vector<int> vc[M]; int attr[M]; bool vis[M]; void gg(int k){ //esplora il grafo gratuito e somma le fermate con punti di attrazione vis[k]=false; if (binary_search(attr,attr+a,k)) tg++; for (int i=0;i<vg[k].size();i++) if(vis[vg[k][i]]) gg(vg[k][i]);} void gb(int k){ //esplora il grafo bus e somma le fermate con punti di attrazione vis[k]=false; if (binary_search(attr,attr+a,k)) tb++; for (int i=0;i<vb[k].size();i++) if(vis[vb[k][i]]) gb(vb[k][i]);} void gt(int k){ //esplora il grafo treno e somma le fermate con punti di attrazione vis[k]=false; if (binary_search(attr,attr+a,k)) tt++; for (int i=0;i<vt[k].size();i++) if(vis[vt[k][i]]) gt(vt[k][i]);} void gc(int k){ //esplora il grafo combinato e somma le fermate con punti di attrazione vis[k]=false; if (binary_search(attr,attr+a,k)) tc++; for (int i=0;i<vc[k].size();i++) if(vis[vc[k][i]]) gc(vc[k][i]);} int main(){ in.open("input.txt"); out.open("output.txt"); in>>n>>a>>cg>>cb>>ct; for (int i=0;i<a;i++) in>>attr[i]; sort(attr,attr+a); for (int i=0;i<cg;i++){ in>>t1>>t2; vg[t1].push_back(t2); vb[t1].push_back(t2); vt[t1].push_back(t2); vc[t1].push_back(t2); vg[t2].push_back(t1); vb[t2].push_back(t1); vt[t2].push_back(t1); vc[t2].push_back(t1); } for (int i=0;i<cb;i++){ in>>t1>>t2; vb[t1].push_back(t2); vc[t1].push_back(t2); vb[t2].push_back(t1); vc[t2].push_back(t1); } for (int i=0;i<ct;i++){ in>>t1>>t2; vt[t1].push_back(t2); vc[t1].push_back(t2); vt[t2].push_back(t1); vc[t2].push_back(t1); } memset(vis,true,n); gg(0); memset(vis,true,n); gb(0); memset(vis,true,n); gt(0); memset(vis,true,n); gc(0); out<<tg<<"\n"<<tb<<"\n"<<tt<<"\n"<<tc; return 0;} |
[C++] Zig Zag
Una sequenza viene detta una sequenza a zig-zag se i valori delle differenze tra numeri successivi si alterna tra valori positivi e valori negativi. La prima differenza può essere negativa 0 positiva, se è negativa quella dopo deve essere positiva, se è positiva quella dopo deve essere negativa e così via. Una sequenza con meno di due elementi è anche una sequenza a zigzag. Ti viene data una sequenza di numeri, tu puoi decidere di eliminare quanti numeri vuoi dalla sequenza in modo che i numeri rimanenti formino una sequenza a zigzag. Trovare la sequenza a zigzag più lunga che è possibile ottenere e stampare la sua lunghezza.
Input
Il programma deve leggere dal file : la prima riga contiene un intero N. La seconda riga contiene N valori positivi, i valori della sequenza di partenza.
Output
Il programma deve scrivere nel file la risposta al problema.
Assunzioni
1 ≤ N ≤ 800
Esempio
input output
10 7
1 17 5 10 13 15 10 5 16 8
Basta sfogliare la sringa ed eliminare tutti gli "errori" che si incontrano:
Input
Il programma deve leggere dal file : la prima riga contiene un intero N. La seconda riga contiene N valori positivi, i valori della sequenza di partenza.
Output
Il programma deve scrivere nel file la risposta al problema.
Assunzioni
1 ≤ N ≤ 800
Esempio
input output
10 7
1 17 5 10 13 15 10 5 16 8
Basta sfogliare la sringa ed eliminare tutti gli "errori" che si incontrano:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | #include <cstdlib> #include <iostream> #include<fstream> using namespace std; ifstream in; ofstream out; int n; int iz(int *c, int n){ bool positive; int nc=n; positive= (c[0]-c[1] < 0); for (int i=0;i<n-1;i++){ int d=c[i]-c[i+1]; if (d==0||(d<0 && !positive)||(d>0 && positive)) nc--; else positive= (d > 0); } return nc; } int main() { in.open("input.txt"); out.open("output.txt"); in>>n; int c [n]; for (int i=0;i<n;i++) in>>c[i]; if (n<2) out<<1; else out << iz(c,n); return 0; } |
[C++] Ristorante
Edoardo possiede un ristorante per al massimo N persone. L’entrata del ristorante ha un guardaroba con N appendini. Ogni cliente può usare un appendino del guardaroba per metterci le proprie giacche. Utilizzare l’iesimo gancio ha un costo ai in euro. Ogni persona può utilizzare al massimo un gancio.
Stasera Edoardo si aspetta di ricevere M clienti al ristorante. Naturalmente ogni cliente vorrà utilizzare gli appendini con il costo minimo (se ce ne sono di più con lo stesso costo, ne prenderà uno a caso tra questi). Purtroppo, se nel momento in cui un cliente arriva non ci sono appendini disponibili, Edoardo deve pagare una multa di D euro al cliente.
Aiuta Edoardo a trovare il profitto in euro (può anche essere negativo) che avrà questa sera per quanto riguarda il guardaroba. Puoi assumere che prima che i clienti arrivino tutti gli appendini siano disponibili e che nessun altro a parte gli m clienti visiterà il ristorante.
Input
Il programma deve leggere da un file di nome “input.cxt”. La prima riga contiene due interi N e D.
La riga successiva contiene N interi, cioè a1, a2, ..., aN. La terza riga contiene l’intero M.
Output
Il programma deve stampare sul file la risposta al problema.
Assunzioni
1 ≤ N ≤ 100.000
1 ≤ M ≤ 200.000
1 ≤ ai ≤ 1000
1 ≤ D ≤ 2000
Esempio
input output
2 1 -5
2 1
1 0
Ordinati i prezzi in ordine crescente li prendiamo tutti in ordine, finiti sottraiamo al profitto la multa:
Stasera Edoardo si aspetta di ricevere M clienti al ristorante. Naturalmente ogni cliente vorrà utilizzare gli appendini con il costo minimo (se ce ne sono di più con lo stesso costo, ne prenderà uno a caso tra questi). Purtroppo, se nel momento in cui un cliente arriva non ci sono appendini disponibili, Edoardo deve pagare una multa di D euro al cliente.
Aiuta Edoardo a trovare il profitto in euro (può anche essere negativo) che avrà questa sera per quanto riguarda il guardaroba. Puoi assumere che prima che i clienti arrivino tutti gli appendini siano disponibili e che nessun altro a parte gli m clienti visiterà il ristorante.
Input
Il programma deve leggere da un file di nome “input.cxt”. La prima riga contiene due interi N e D.
La riga successiva contiene N interi, cioè a1, a2, ..., aN. La terza riga contiene l’intero M.
Output
Il programma deve stampare sul file la risposta al problema.
Assunzioni
1 ≤ N ≤ 100.000
1 ≤ M ≤ 200.000
1 ≤ ai ≤ 1000
1 ≤ D ≤ 2000
Esempio
input output
2 1 -5
2 1
1 0
Ordinati i prezzi in ordine crescente li prendiamo tutti in ordine, finiti sottraiamo al profitto la multa:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | #include <cstdlib> #include <iostream> #include<fstream> #include<algorithm> using namespace std; ifstream in; ofstream out; int n,d,m,profitto; int main() { in.open("input.txt"); out.open("output.txt"); in >> n>>d; int prezzi[n]; for (int i=0;i<n;i++) in>>prezzi[i]; in>>m; profitto=0; sort(prezzi,prezzi+n); for (int i=0;i<m;i++) if(i<n) profitto+=prezzi[i]; else profitto-=d; out<<profitto; return 0; } |
Iscriviti a:
Post (Atom)