Cod sursa(job #11580)

Utilizator gurneySachelarie Bogdan gurney Data 31 ianuarie 2007 21:25:54
Problema Triplete Scor 20
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.14 kb
program triplete;
  const
    fin='triplete.in';
    fout='triplete.out';
    nmax=4096;
  type
    muchie=record
      x,y:integer;
      end;
  var
    m:array[1..65536] of muchie;
    adj:array[1..nmax,0..16] of longint;
    nm,n,i,j,k,x,y:longint;
    num_tr:longint;
    num:array[0..65536] of byte;

procedure adauga(x,y:longint);
  begin
    adj[x,y shr 4]:=adj[x,y shr 4] or (1 shl (y and 15));
  end;

function num_ones(x:longint):byte;
  var
    num:byte;
  begin
    num:=0;
    while x<>0 do
      begin
        inc(num);
        x:=x and (x-1);
      end;
    num_ones:=num;
  end;

begin
  assign(input,fin);
    reset(input);
    readln(n,nm);
    for i:=1 to nm do
      begin
        readln(m[i].x,m[i].y);
        adauga(m[i].x,m[i].y);
        adauga(m[i].y,m[i].x);
      end;
  close(input);
  assign(output,fout);
    rewrite(output);
    for i:=0 to 65536 do
      num[i]:=num_ones(i);
    num_tr:=0;
    for i:=1 to nm do
      begin
        for j:=0 to n shr 4 do
          inc(num_tr,num[adj[m[i].x,j] and adj[m[i].y,j]])
      end;
    writeln(num_tr div 3);
  close(output);
end.