# Cottarelle in classe

**URL:** <https://forum.olinfo.it/t/cottarelle-in-classe/4730>\
**Category:** Aiuto\
**Created:** [22 Luglio 2017, 10:42pm UTC](https://forum.olinfo.it/t/cottarelle-in-classe/4730 "2017-07-22T22:42:10Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![doublechar14](https://forum.olinfo.it/user_avatar/forum.olinfo.it/doublechar14/32/426_2.png) [@doublechar14](https://forum.olinfo.it/u/doublechar14)\
**Post date:** [22 Luglio 2017, 10:42pm UTC](https://forum.olinfo.it/t/cottarelle-in-classe/4730/1 "2017-07-22T22:42:10Z")

</div>

L’ultima idea a cui avevo pensato e speravo funzionasse era di ordinare gli archi e prendere quelli che occupassero meno “spazio” (cioè con differenza assoluta tra m ed f minore possibile), era greedy ma ottengo quasi tutti output non corretti e qualche timeout.

Ho bisogno di qualche hint, non ho idee 😕

---

<div class="post-metadata">

**Author:** ![rossimelthomas](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/r/d26b3c/32.png) [@rossimelthomas](https://forum.olinfo.it/u/rossimelthomas)\
**Post date:** [23 Luglio 2017, 8:40pm UTC](https://forum.olinfo.it/t/cottarelle-in-classe/4730/2 "2017-07-23T20:40:09Z")

</div>

Seguo  
Secondo voi funziona in nlogn?  
In particolare quante istruzioni al secondo esegue questo server?

---

<div class="post-metadata">

**Author:** ![filippos](https://forum.olinfo.it/user_avatar/forum.olinfo.it/filippos/32/103_2.png) [@filippos](https://forum.olinfo.it/u/filippos)\
**Post date:** [23 Luglio 2017, 8:52pm UTC](https://forum.olinfo.it/t/cottarelle-in-classe/4730/3 "2017-07-23T20:52:50Z")

</div>

> [@rossimelthomas](#):
>
> Secondo voi funziona in nlogn?  
> In particolare quante istruzioni al secondo esegue questo server?

Si funziona (e teoricamente non è migliorabile), però questo task ha un input molto grande e senza fast input temo che ti serva un’implementazione molto attenta!

Per il fast input : [Fast I/O - n°3 da Delfad0r](https://forum.olinfo.it/t/fast-i-o/3830/3)

---

<div class="post-metadata">

**Author:** ![frakkiobello](https://forum.olinfo.it/user_avatar/forum.olinfo.it/frakkiobello/32/2768_2.png) [@frakkiobello](https://forum.olinfo.it/u/frakkiobello)\
**Post date:** [24 Luglio 2017, 10:29am UTC](https://forum.olinfo.it/t/cottarelle-in-classe/4730/4 "2017-07-24T10:29:43Z")

</div>

Per usare il fastInput con la funzione citata

> [@Fast I/O](https://forum.olinfo.it/t/fast-i-o/3830/3):
>
> int fast\_read\_int() {  
> int c, n = 0;  
> do c = getchar\_unlocked();  
> while(c \< ‘0’ || c \> ‘9’);  
> do {  
> n = (n \<\< 3) + (n \<\< 1) + (c - ‘0’);  
> c = getchar\_unlocked();  
> } while(c \>= ‘0’ && c \<= ‘9’);  
> return n;  
> }

Dovrei, dopo avere dichiarato la funzione, sostituire per esempio  
`int n,a;`  
` in>>n;`  
` for(int i=0;i<n;i++)`  
` in>>a;`

Con:  
`int n,a,b;`  
` in>>n;`  
` for(int i=0;i<n;i++)`  
`a=getchar_unlocked();`

E basta?

---

<div class="post-metadata">

**Author:** ![dp\_1](https://forum.olinfo.it/user_avatar/forum.olinfo.it/dp_1/32/2635_2.png) [@dp\_1](https://forum.olinfo.it/u/dp_1)\
**Post date:** [24 Luglio 2017, 11:30am UTC](https://forum.olinfo.it/t/cottarelle-in-classe/4730/5 "2017-07-24T11:30:27Z")

</div>

> [@frakkiobello](#):
>
> ```
> a=getchar_unlocked();
> 
> ```

In questo modo stai leggendo un solo carattere, quello che dovresti fare è

```
a = fast_read_int();

```

---

<div class="post-metadata">

**Author:** ![doublechar14](https://forum.olinfo.it/user_avatar/forum.olinfo.it/doublechar14/32/426_2.png) [@doublechar14](https://forum.olinfo.it/u/doublechar14)\
**Post date:** [24 Luglio 2017, 10:00pm UTC](https://forum.olinfo.it/t/cottarelle-in-classe/4730/6 "2017-07-24T22:00:21Z")

</div>

Ho cercato di risolverlo con la LIS (considerando ogni cotta come un intervallo [m, f]) però faccio 0/0 e non capisco dov’è l’errore 😕  
Qualche aiuto?

[https://pastebin.com/Crqh976P](https://pastebin.com/Crqh976P)

---

<div class="post-metadata">

**Author:** ![frakkiobello](https://forum.olinfo.it/user_avatar/forum.olinfo.it/frakkiobello/32/2768_2.png) [@frakkiobello](https://forum.olinfo.it/u/frakkiobello)\
**Post date:** [25 Luglio 2017, 8:47am UTC](https://forum.olinfo.it/t/cottarelle-in-classe/4730/7 "2017-07-25T08:47:17Z")

</div>

Ma se in corsa mattutina io sostituisco

```
 for (int i = 0; i < M; i++)
 {
    int u,v,w;
    in >> u >> v >> w;

```

con

```
 for (int i = 0; i < M; i++)
 {
 int u,v,w;
 u=fast_read_int();
 v=fast_read_int();
 w=fast_read_int();

```

Ottengo 0/100 con solo timeOut

---

<div class="post-metadata">

**Author:** ![bortoz](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/b/7c8e57/32.png) [@bortoz](https://forum.olinfo.it/u/bortoz)\
**Post date:** [25 Luglio 2017, 2:57pm UTC](https://forum.olinfo.it/t/cottarelle-in-classe/4730/8 "2017-07-25T14:57:44Z")

</div>

In corsa mattutina devi leggere da file.  
La funzione `getchar_unlocked()` legge da tastiera.

---

<div class="post-metadata">

**Author:** ![dp\_1](https://forum.olinfo.it/user_avatar/forum.olinfo.it/dp_1/32/2635_2.png) [@dp\_1](https://forum.olinfo.it/u/dp_1)\
**Post date:** [25 Luglio 2017, 4:29pm UTC](https://forum.olinfo.it/t/cottarelle-in-classe/4730/9 "2017-07-25T16:29:50Z")

</div>

Un modo semplice per leggere da file usando getchar\_unlocked è chiamare freopen all’inizio dell’esecuzione:

```
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
```

---

<div class="post-metadata">

**Author:** ![frakkiobello](https://forum.olinfo.it/user_avatar/forum.olinfo.it/frakkiobello/32/2768_2.png) [@frakkiobello](https://forum.olinfo.it/u/frakkiobello)\
**Post date:** [25 Luglio 2017, 8:21pm UTC](https://forum.olinfo.it/t/cottarelle-in-classe/4730/10 "2017-07-25T20:21:52Z")

</div>

Riusciresti a elencarmi la sintassi completa dell input/output (le varie istruziono per in e ou)perché solitamente uso la libreria fstream.  
Grazie mille!!

---

<div class="post-metadata">

**Author:** ![bortoz](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/b/7c8e57/32.png) [@bortoz](https://forum.olinfo.it/u/bortoz)\
**Post date:** [25 Luglio 2017, 8:56pm UTC](https://forum.olinfo.it/t/cottarelle-in-classe/4730/11 "2017-07-25T20:56:14Z")

</div>

Dovrebbe bastare una cosa così:

```auto
int fastread()
{
	int N = 0;
	char C = getchar();
	while(C>47 && C<58)
	{
		N = (N<<1) + (N<<3) + C - 48;
		C = getchar();
	}
	return N;
}

int main()
{
	freopen("input.txt","r",stdin);
	freopen("output.txt","w",stdout);
	int K = fastread();
	cout << K;
	return 0;
}

```

---

<div class="post-metadata">

**Author:** ![frakkiobello](https://forum.olinfo.it/user_avatar/forum.olinfo.it/frakkiobello/32/2768_2.png) [@frakkiobello](https://forum.olinfo.it/u/frakkiobello)\
**Post date:** [25 Luglio 2017, 9:34pm UTC](https://forum.olinfo.it/t/cottarelle-in-classe/4730/12 "2017-07-25T21:34:19Z")

</div>

> [@frakkiobello](#):
>
> u=fast\_read\_int();  
> v=fast\_read\_int();  
> w=fast\_read\_int();

All’istruzione `freopen("input.txt","r",stdin);`  
crea questo errore

```
footing.cpp:87:18: error: 'fast_read_int' was not declared in this scope
  N=fast_read_int();

```

---

<div class="post-metadata">

**Author:** ![bortoz](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/b/7c8e57/32.png) [@bortoz](https://forum.olinfo.it/u/bortoz)\
**Post date:** [25 Luglio 2017, 10:19pm UTC](https://forum.olinfo.it/t/cottarelle-in-classe/4730/13 "2017-07-25T22:19:08Z")

</div>

La compilazione dà esito positivo?  
Se fallisce prova a postare il codice che trovo un po’ difficile capire qual è la causa senza vederlo.

---

<div class="post-metadata">

**Author:** ![frakkiobello](https://forum.olinfo.it/user_avatar/forum.olinfo.it/frakkiobello/32/2768_2.png) [@frakkiobello](https://forum.olinfo.it/u/frakkiobello)\
**Post date:** [25 Luglio 2017, 10:22pm UTC](https://forum.olinfo.it/t/cottarelle-in-classe/4730/14 "2017-07-25T22:22:06Z")

</div>

No okk ho risolto, la compilazione falliva ma per un altro errore, correggendo quello è risultata corretta, grazie mille.

---

<div class="post-metadata">

**Author:** ![dp\_1](https://forum.olinfo.it/user_avatar/forum.olinfo.it/dp_1/32/2635_2.png) [@dp\_1](https://forum.olinfo.it/u/dp_1)\
**Post date:** [25 Luglio 2017, 10:32pm UTC](https://forum.olinfo.it/t/cottarelle-in-classe/4730/15 "2017-07-25T22:32:53Z")

</div>

```
#include <cstdio>

int readInt()
{
    int res = 0;
    char ch = 0;
    while(ch < '0') ch = getchar_unlocked();
    for(; ch >= '0'; ch = getchar_unlocked()) res = res * 10 + ch - '0';
    return res;
}

void writeInt(int v)
{
    char buf[14];
    int p = 0;
    if(v == 0) buf[p++] = 0;
    for(; v; v /= 10) buf[p++] = v % 10;
    while(p--) putchar_unlocked(buf[p] + '0');
}

int main()
{
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    
    int N = readInt();
    writeInt(N);
}

```

Occhio che tutte le funzioni postate finora non gestiscono i numeri negativi

---

<div class="post-metadata">

**Author:** ![frakkiobello](https://forum.olinfo.it/user_avatar/forum.olinfo.it/frakkiobello/32/2768_2.png) [@frakkiobello](https://forum.olinfo.it/u/frakkiobello)\
**Post date:** [28 Luglio 2017, 10:08am UTC](https://forum.olinfo.it/t/cottarelle-in-classe/4730/16 "2017-07-28T10:08:02Z")

</div>

Nel caso in cui ho in input sia int che char posso alternare la funzione readInt() con getchar\_unlocked() per i caratteri? 🙂

---

<div class="post-metadata">

**Author:** ![bortoz](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/b/7c8e57/32.png) [@bortoz](https://forum.olinfo.it/u/bortoz)\
**Post date:** [28 Luglio 2017, 10:48am UTC](https://forum.olinfo.it/t/cottarelle-in-classe/4730/17 "2017-07-28T10:48:07Z")

</div>

Credo di si, quando invece hai delle stringhe è sufficiente usare `push_back`.  
Fai però attenzione al tipo di caratteri e ai controlli che devi fare, per esempio quando ti dice che sono presenti solo caratteri stampabili.

---

<div class="post-metadata">

**Author:** ![dp\_1](https://forum.olinfo.it/user_avatar/forum.olinfo.it/dp_1/32/2635_2.png) [@dp\_1](https://forum.olinfo.it/u/dp_1)\
**Post date:** [28 Luglio 2017, 1:03pm UTC](https://forum.olinfo.it/t/cottarelle-in-classe/4730/18 "2017-07-28T13:03:42Z")

</div>

Se l’input è del tipo `intero [spazio] carattere` allora devi stare attento a non considerare lo spazio come il carattere che cerchi. Quello che di solito faccio è questo:

```
int N = readInt();
char ch = '\0';
while(ch <= ' ') ch = getchar_unlocked();
```

---

<div class="post-metadata">

**Author:** ![frakkiobello](https://forum.olinfo.it/user_avatar/forum.olinfo.it/frakkiobello/32/2768_2.png) [@frakkiobello](https://forum.olinfo.it/u/frakkiobello)\
**Post date:** [7 Gennaio 2018, 3:55pm UTC](https://forum.olinfo.it/t/cottarelle-in-classe/4730/19 "2018-01-07T15:55:32Z")

</div>

Riapro la questione dopo mesi  
Per andare a capo dopo l’output?  
Chiedo perché in locale non mi fa usare la getchar\_unlocked ()

---

<div class="post-metadata">

**Author:** ![v.territo](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/v/b19c9b/32.png) [@v.territo](https://forum.olinfo.it/u/v.territo)\
**Post date:** [7 Gennaio 2018, 4:21pm UTC](https://forum.olinfo.it/t/cottarelle-in-classe/4730/20 "2018-01-07T16:21:28Z")

</div>

Se non sbaglio funziona solo con linux

[Pagina seguente](https://forum.olinfo.it/t/cottarelle-in-classe/4730.md?page=2)
