Pagini recente » Cod sursa (job #628242) | Cod sursa (job #1922254) | Cod sursa (job #511650) | Cod sursa (job #2720395) | Cod sursa (job #495099)
Cod sursa(job #495099)
#include <cstdio>
#include <cstdlib>
#include <list>
using namespace std;
FILE *fin=fopen("oite.in","r");
FILE *fout=fopen("oite.out","w");
struct pnt {
int x,y;
};
int a[1024];
list<pnt> v[254];
unsigned char crc8(int a)
{
unsigned char crc = 0;
for (int i=0; i<sizeof(int)*8+8; i++)
{
crc=((crc<<1)|(a&1))^0xD5;
a=a>>1;
}
return crc;
}
int main (int argc, char * const argv[]) {
int n,l;
fscanf(fin, "%d%d",&n,&l);
for (int i=0; i<n; i++)
fscanf(fin, "%d",&a[i]);
for (int i=0; i<n; i++)
for (int j=i+1; j<n; j++)
{
pnt tmp;
tmp.x= i;
tmp.y= j;
v[crc8(a[i]+a[j])].push_back(tmp);
}
int sum = 0;
for (int i=0; i<n; i++)
for (int j=i+1; j<n; j++)
{
list<pnt> & li = v[crc8(l-a[i]-a[j])];
for (list<pnt>::iterator ii = li.begin(); ii!=li.end(); ii++)
{
if ((*ii).x<=i) continue;
if ((*ii).x<=j) continue;
if ((*ii).y<=i) continue;
if ((*ii).y<=j) continue;
if ((a[(*ii).x]+a[(*ii).y])!=(l-a[i]-a[j])) continue;
sum++;
}
}
fprintf(fout, "%d",sum);
fclose(fin);
fclose(fout);
return 0;
}