Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<fstream>
- #include<deque>
- #include<algorithm>
- using namespace std;
- deque <int> errori;
- struct Studenti
- {
- long int capa;
- long int costo;
- bool disponibile=true;
- }A[100000];
- bool verifica(int t, deque <int> lista, int numeroerrori, int sommadisponibile, Studenti A[], int numerostudenti)
- {
- int studentinecessari;
- if(numeroerrori%t==0)
- studentinecessari=numeroerrori/t;
- else studentinecessari=numeroerrori/t+1;
- int maggiorecapacita=A[0].capa;
- int maggiore;
- int conta=0;
- for(int j=0;j<studentinecessari;j++)
- {
- int diff=lista.back();
- int i=0;
- while(!A[conta].disponibile)
- conta++;
- if(A[conta].capa>=diff)
- {
- while(A[i].capa>diff && i<=numerostudenti)
- i++;
- i--;
- sommadisponibile-=A[i].costo;
- A[i].disponibile=false;
- for(int x=0;x<i;x++)
- if(!lista.empty())
- lista.pop_back();
- }
- else return false;
- }
- if(sommadisponibile>0)
- return true;
- else return false;
- }
- bool confronta(Studenti &a, Studenti &b)
- {
- if (a.capa==b.capa)
- return a.costo>b.costo;
- return a.capa>b.capa;
- }
- int main()
- {
- ifstream in("input.txt");
- ofstream out("output.txt");
- int studenti, bug, somma;
- in>>studenti>>bug>>somma;
- int tmp;
- for(int i=0;i<bug;i++)
- {
- in>>tmp;
- errori.push_back(tmp);
- }
- sort(errori.begin(), errori.end());
- for(int i=0;i<studenti;i++)
- in>>A[i].capa;
- for(int i=0;i<studenti;i++)
- in>>A[i].costo;
- sort(A, A+studenti, confronta);
- if(verifica(bug, errori, bug, somma, A, studenti))
- out<<"SI";
- else out<<"NO";
- }
Advertisement
Add Comment
Please, Sign In to add comment