# Cultural Events (ois\_events)

**URL:** <https://forum.olinfo.it/t/cultural-events-ois-events/5999>\
**Category:** Aiuto\
**Created:** [9 Gennaio 2020, 12:40pm UTC](https://forum.olinfo.it/t/cultural-events-ois-events/5999 "2020-01-09T12:40:29Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Number33](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/n/3da27b/32.png) [@Number33](https://forum.olinfo.it/u/Number33)\
**Post date:** [9 Gennaio 2020, 12:40pm UTC](https://forum.olinfo.it/t/cultural-events-ois-events/5999/1 "2020-01-09T12:40:29Z")

</div>

Non riesco a trovare l’errore nel codice, aldilà del tempo di esecuzione alcuni testcase danno sbagliati, se qualcuno può illuminarmi ne sarei grato. Il codice:

```
#include <stdio.h>
#include <assert.h>
#include <vector>
#include <algorithm>

#define MAXN 50000

using namespace std;

int N, V, i, k=0, ris;
int prices[MAXN], vouchers[MAXN];
vector<int> pr;
vector<int> vo;

int main() {
  freopen("input0.txt", "r", stdin);
  freopen("output0.txt", "w", stdout);

    assert(2 == scanf("%d %d", &N, &V));
    for(i=0; i<N; i++)
    {
        assert(1 == scanf("%d", &prices[i]));
        pr.push_back(prices[i]);
    }

    for(i=0; i<V; i++)
    {
        assert(1 == scanf("%d", &vouchers[i]));
        vo.push_back(vouchers[i]);
    }

    sort(pr.begin(), pr.end());
    sort(vo.begin(), vo.end());

    while((pr.size()!=0)&&(vo.size()!=0))
    {
        if(pr[0]<=vo[0])
        {
            vo.erase(vo.begin());
            pr.erase(pr.begin());
            ris++;
        }
        else if(pr[0]>vo[0])
        {
            pr.erase(pr.begin());
        }
    }

    printf("%d\n", ris);
    return 0;
}

```

Prima di tutto ordino i vettori, in caso l’evento possa essere comprato dal ticket elimino tutti e due e aggiorno il risultato, in caso contrario elimino l’evento in quanto, essendo i vettori ordinati ed esaminando il ticket con più valore, l’evento risulta troppo costoso per qualsiasi ticket; tutto ciò finchè uno dei due vettori risulta vuoto.

---

<div class="post-metadata">

**Author:** ![simpatine](https://forum.olinfo.it/user_avatar/forum.olinfo.it/simpatine/32/444_2.png) [@simpatine](https://forum.olinfo.it/u/simpatine)\
**Post date:** [9 Gennaio 2020, 12:47pm UTC](https://forum.olinfo.it/t/cultural-events-ois-events/5999/2 "2020-01-09T12:47:56Z")

</div>

Se fai l’erase del primo elemento di pr pr[0] sarà sempre maggiore di vo[0] (l’ordinamento è crescente)

---

<div class="post-metadata">

**Author:** ![simpatine](https://forum.olinfo.it/user_avatar/forum.olinfo.it/simpatine/32/444_2.png) [@simpatine](https://forum.olinfo.it/u/simpatine)\
**Post date:** [9 Gennaio 2020, 12:49pm UTC](https://forum.olinfo.it/t/cultural-events-ois-events/5999/3 "2020-01-09T12:49:14Z")

</div>

Per fixare il tempo ti suggerisco di non fare l’erase, essendo in O(N).  
Spero di aver risolto 🙂

---

<div class="post-metadata">

**Author:** ![Number33](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/n/3da27b/32.png) [@Number33](https://forum.olinfo.it/u/Number33)\
**Post date:** [9 Gennaio 2020, 1:07pm UTC](https://forum.olinfo.it/t/cultural-events-ois-events/5999/4 "2020-01-09T13:07:38Z")

</div>

Totale dimenticanza del fatto che sort funziona in modo ascendente, grazie mille. Per l’erase come mi consigli di migliorarlo?  
EDIT:  
Risolto operando dall’altra “sponda” del vettore, il codice se interessasse a qualcuno:

```
#include <stdio.h>
#include <assert.h>
#include <vector>
#include <algorithm>

#define MAXN 50000

using namespace std;

int N, V, i, k=0, ris;
int prices[MAXN], vouchers[MAXN];
vector<int> pr;
vector<int> vo;

int main() {
// freopen("input.txt", "r", stdin);
// freopen("output.txt", "w", stdout);

    assert(2 == scanf("%d %d", &N, &V));
    for(i=0; i<N; i++)
    {
        assert(1 == scanf("%d", &prices[i]));
        pr.push_back(prices[i]);
    }

    for(i=0; i<V; i++)
    {
        assert(1 == scanf("%d", &vouchers[i]));
        vo.push_back(vouchers[i]);
    }

    sort(pr.begin(), pr.end());
    sort(vo.begin(), vo.end());

    while((pr.size()!=0)&&(vo.size()!=0))
    {
        if(pr[pr.size()-1]<=vo[vo.size()-1])
        {
            vo.pop_back();
            pr.pop_back();
            ris++;
        }
        else
        {
            pr.pop_back();
        }
    }

    printf("%d\n", ris);
    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:** [9 Gennaio 2020, 2:43pm UTC](https://forum.olinfo.it/t/cultural-events-ois-events/5999/5 "2020-01-09T14:43:17Z")

</div>

Puoi invece di eliminare gli elementi tenerti i 2 indici ed incrementare quelli invece di riferirti sempre al primo elemento.
