Cod sursa(job #1722779)

Utilizator Ruxandra985Nanu Ruxandra Laura Ruxandra985 Data 28 iunie 2016 20:09:28
Problema Tribute Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <cstdio>
#include <algorithm>

using namespace std;
pair <int,int> v[50001];
int f[50001],s[50001],s2[50001],d[50001],d2[50001],sol[2];
int main()
{
    FILE *fin=fopen ("tribute.in","r");
    FILE *fout=fopen ("tribute.out","w");
    int n,dx,dy,i,k;
    sol[0]=sol[1]=1000000000;
    fscanf (fin,"%d%d%d",&n,&dx,&dy);
    for (i=1;i<=n;i++)
        fscanf (fin,"%d%d",&v[i].first,&v[i].second);
    for (k=0;k<=2;k++){
        for (i=0;i<=50000;i++)
            f[i]=0;
        for (i=1;i<=n;i++)
            if (k)
                f[v[i].first]++;
            else f[v[i].second]++;
        s[0]=0;
        s2[0]=f[0];
        for (i=1;i<=50000;i++){
            s[i]=s[i-1]+s2[i-1];
            s2[i]=f[i]+s2[i-1];
        }
        d[50000]=0;
        d2[50000]=f[50000];
        for (i=49999;i>=0;i--){
            d[i]=d[i+1]+d2[i+1];
            d2[i]=f[i]+d2[i+1];
        }
        for (i=0;i+dy<=50000;i++)
            if (sol[k]>s[i]+d[i+dy])
                sol[k]=s[i]+d[i+dy];
    }
    fprintf (fout,"%d",sol[1]+sol[0]);
    return 0;
}