Cod sursa(job #972102)

Utilizator OnimushaLordTiberiu Copaciu OnimushaLord Data 10 iulie 2013 23:39:44
Problema Oite Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.64 kb
# include <cstdio>
# include <vector>
# include <algorithm>
# define MAXN 1030
# define MOD 666013
# define pb push_back
using namespace std;
int x,y,s;
struct oi
{
    int x,y,s;
};
oi oaie;
vector <oi> a[MOD];
vector <oi> :: iterator it;
int v[MAXN],V[10],l,n,i,j,nr,ind;
int o[MAXN][10];

bool verificare(int a, int b, int c, int d)
{
    if(a==b || a==c || a==d || b==c || b==d || c==d) return false;
    return true;
}
bool verificare2(int a, int b, int c, int d, int nr)
{
    int i,val;
    V[0]=a;
    V[1]=b;
    V[2]=c;
    V[3]=d;
    sort(V,V+4);
    if(nr==0) return true;
    val=0;
    for(i=1; i<=nr; ++i)
        if(o[i][0]==V[0] && o[i][1]==V[1] && o[i][2]==V[2] && o[i][3]==V[3]) val++;
    if(val>0) return false;
    return true;
}
void solve()
{
    int i,j;
    for(i=1; i<n; ++i)
        for(j=i+1; j<=n; ++j)
        {
            oaie.x=i;
            oaie.y=j;
            oaie.s=v[i]+v[j];
            ind=(l-oaie.s)%MOD;
            for(it=a[ind].begin(); it!=a[ind].end(); ++it)
                if((*it).s==l-oaie.s && verificare(i,j,(*it).x,(*it).y) && verificare2(i,j,(*it).x,(*it).y,nr))
                {
                    nr++;
                    o[nr][0]=i;
                    o[nr][1]=j;
                    o[nr][2]=(*it).x;
                    o[nr][3]=(*it).y;
                    sort(o[nr],o[nr]+4);
                }
            a[oaie.s%MOD].pb(oaie);
        }
}
int main()
{
    freopen("oite.in", "r", stdin);
    freopen("oite.out", "w", stdout);
    scanf("%d %d\n", &n, &l);
    for(i=1; i<=n; ++i) scanf("%d ", &v[i]);
    solve();
    printf("%d\n", nr);
}