Pagini recente » Cod sursa (job #842394) | Cod sursa (job #1026718) | Cod sursa (job #1966645) | Cod sursa (job #774626) | Cod sursa (job #1611740)
#include<stdio.h>
const int M = 65537, N = 4097, P = 32;
int mat[N][N / P], a[M], b[M];
int biti (int x)
{
int sol = 0;
while (x)
{
sol++;
x = (x & (x - 1));
}
return sol;
}
class InputReader { //not mine
public:
InputReader() {}
InputReader(const char *file_name) {
input_file = fopen(file_name, "r");
cursor = 0;
fread(buffer, SIZE, 1, input_file);
}
inline InputReader &operator >>(int &n) {
while(buffer[cursor] < '0' || buffer[cursor] > '9') {
advance();
}
n = 0;
while('0' <= buffer[cursor] && buffer[cursor] <= '9') {
n = n * 10 + buffer[cursor] - '0';
advance();
}
return *this;
}
private:
FILE *input_file;
static const int SIZE = 1 << 17;
int cursor;
char buffer[SIZE];
inline void advance() {
++ cursor;
if(cursor == SIZE) {
cursor = 0;
fread(buffer, SIZE, 1, input_file);
}
}
};
int main ()
{
FILE *out;
InputReader cin("triplete.in");
out = fopen ("triplete.out", "w");
int n, m;
cin>>n>>m;
int i, aux;
for (i = 1; i <= m; i++)
{
cin >> a[i] >> b[i];
if (a[i] > b[i])
{
aux = a[i];
a[i] = b[i];
b[i] = aux;
}
mat[a[i]][b[i] / P] += 1 << (b[i] % P);
}
int j, s = 0, c = n / P;
for (i = 1; i <= m; i++)
for (j = 0; j <= c; j++)
s += biti (mat[a[i]][j] & mat[b[i]][j]);
fprintf (out, "%d", s);
return 0;
}