# Speculative Execution (0/100) C++

**URL:** <https://forum.olinfo.it/t/speculative-execution-0-100-c/5154>\
**Category:** Aiuto\
**Created:** [16 Aprile 2018, 12:20pm UTC](https://forum.olinfo.it/t/speculative-execution-0-100-c/5154 "2018-04-16T12:20:13Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![antonio.tinelli](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/a/f19dbf/32.png) [@antonio.tinelli](https://forum.olinfo.it/u/antonio.tinelli)\
**Post date:** [16 Aprile 2018, 12:20pm UTC](https://forum.olinfo.it/t/speculative-execution-0-100-c/5154/1 "2018-04-16T12:20:13Z")

</div>

Salve , prima di tutto voglio augurare buona fortuna a tutti per la prossima selezione.  
Comunque , il seguente codice funziona in locale (Controllato input e output uguali agli allegati)  
Ma durante l’esecuzione sulla piattaforma il risultato e’ 0/100.

> #include `<iostream>`  
> #include `<string>`  
> #include `<cstdio>`  
> #define MAXN 100000
> 
> using namespace std;  
> std::string target\_var[MAXN];  
> std::string operand1\_var[MAXN];  
> std::string operand2\_var[MAXN];  
> int N;
> 
> int IsInTarget(int pos , string var1,string var2)  
> {  
> for(int i = pos ; i!=0 ; i–)  
> {  
> if (target\_var[i] == var1 || target\_var[i] == var2)  
> return 1;   
> }  
> }
> 
> int main() {  
> FILE \*fr, \*fw;  
> fr =freopen(“input.txt”,“r”,stdin);  
> fw =freopen(“output.txt”,“w”,stdout);  
> int r;  
> std::cin \>\> N;  
> for (int i = 0; i \< N; i++) {  
> char eq, op;  
> std::cin \>\> target\_var[i] \>\> eq \>\> operand1\_var[i] \>\> op \>\> operand2\_var[i];  
> if (!IsInTarget(i,operand1\_var[i],operand2\_var[i]))  
> r++;  
> }//leggo tutti gli operatori
> 
> cout \<\< r ;  
> return 0;  
> }

---

<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:** [16 Aprile 2018, 2:13pm UTC](https://forum.olinfo.it/t/speculative-execution-0-100-c/5154/2 "2018-04-16T14:13:59Z")

</div>

A prima vista sembra che il codice sia troppo lento, l’errore che ottieni è `execution timed out` o `output is incorrect`?

---

<div class="post-metadata">

**Author:** ![antonio.tinelli](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/a/f19dbf/32.png) [@antonio.tinelli](https://forum.olinfo.it/u/antonio.tinelli)\
**Post date:** [16 Aprile 2018, 3:03pm UTC](https://forum.olinfo.it/t/speculative-execution-0-100-c/5154/3 "2018-04-16T15:03:01Z")

</div>

output is incorrect -\> Non riesco a capire il motivo …  
Per il timed out posso ottimizzarlo 😕

---

<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:** [16 Aprile 2018, 3:23pm UTC](https://forum.olinfo.it/t/speculative-execution-0-100-c/5154/4 "2018-04-16T15:23:17Z")

</div>

```
int r; -> int r = 0;

```

Non inizializzi r, ad ogni esecuzione del tuo programma è potenzialmente diverso.

Per ottimizzare ti farei notare per prima cosa come il tuo sia un algoritmo \mathcal O(N^2) - per ogni inserimento scorri tutto l’array con i precedenti. Con i limiti del problema ti serve un modo di sapere più rapidamente se una stringa è già stata vista. Puoi usare un std::set\<string\> per cercare una stringa in \mathcal O(logN) invece che \mathcal O(N)

---

<div class="post-metadata">

**Author:** ![antonio.tinelli](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/a/f19dbf/32.png) [@antonio.tinelli](https://forum.olinfo.it/u/antonio.tinelli)\
**Post date:** [16 Aprile 2018, 3:28pm UTC](https://forum.olinfo.it/t/speculative-execution-0-100-c/5154/5 "2018-04-16T15:28:13Z")

</div>

> [@dp\_1](#):
>
> int r; -\> int r = 0;

Anche con l’inizializzazione della variabile ho sempre lo stesso problema 😕

---

<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:** [16 Aprile 2018, 3:29pm UTC](https://forum.olinfo.it/t/speculative-execution-0-100-c/5154/6 "2018-04-16T15:29:38Z")

</div>

Prova a cambiare il typo di eq e op in string, se non sbaglio lo spazio viene considerato come un carattere valido da cin se legge in un char

---

<div class="post-metadata">

**Author:** ![antonio.tinelli](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/a/f19dbf/32.png) [@antonio.tinelli](https://forum.olinfo.it/u/antonio.tinelli)\
**Post date:** [16 Aprile 2018, 3:32pm UTC](https://forum.olinfo.it/t/speculative-execution-0-100-c/5154/7 "2018-04-16T15:32:09Z")

</div>

Niente , sempre stessa situazione .

---

<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:** [16 Aprile 2018, 3:32pm UTC](https://forum.olinfo.it/t/speculative-execution-0-100-c/5154/8 "2018-04-16T15:32:35Z")

</div>

Ah, e il loop in `IsInTarget` dovrebbe avere `>= 0` come condizione di continuazione, con `!= 0` non controllerai mai l’elemento in 0  
Aggiungo anche che apri i file di input e output ma non li usi mai

---

<div class="post-metadata">

**Author:** ![antonio.tinelli](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/a/f19dbf/32.png) [@antonio.tinelli](https://forum.olinfo.it/u/antonio.tinelli)\
**Post date:** [16 Aprile 2018, 3:36pm UTC](https://forum.olinfo.it/t/speculative-execution-0-100-c/5154/9 "2018-04-16T15:36:05Z")

</div>

freopen mi fa il redirect dell’input all’stdin , se provi il codice in locale funziona con gli esempi dati dal sito.  
Quindi teoricamente dovrebbe contarmi la prima task corretta , pero’ viene contata anche quella sbagliata

---

<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:** [16 Aprile 2018, 3:42pm UTC](https://forum.olinfo.it/t/speculative-execution-0-100-c/5154/10 "2018-04-16T15:42:05Z")

</div>

Cambiando un paio di cose sembra funzionare:

- r = 0;
- i \>= 0
- manca un `return 0;` alla fine di IsInTarget, se non ritorna 1 il valore è indefinito
- Con questa implementazione andrà fuori tempo ben prima, ma MAXN dovrebbe essere 10^6 e non 10^5

---

<div class="post-metadata">

**Author:** ![antonio.tinelli](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/a/f19dbf/32.png) [@antonio.tinelli](https://forum.olinfo.it/u/antonio.tinelli)\
**Post date:** [16 Aprile 2018, 3:45pm UTC](https://forum.olinfo.it/t/speculative-execution-0-100-c/5154/11 "2018-04-16T15:45:40Z")

</div>

Ok , ora funziona .  
Ti ringrazio , buona giornata!
