#include #include #include #include typedef unsigned long long int ull; typedef struct { int N; int n; ull *A; } coupons; coupons initempty ( int ) ; void destroycoupons ( coupons * ) ; coupons addcoupon ( coupons, int ) ; int allcoupons ( coupons ) ; coupons initempty ( int N ) { coupons S; int m, i; S.N = N; S.n = 0; m = (N + 63) / 64; S.A = (ull *)malloc(m * sizeof(ull)); for (i=0; i> 6] & (1ULL << (c & 63))) == 0) { ++S.n; S.A[c >> 6] |= (1ULL << (c & 63)); } return S; } int allcoupons ( coupons S ) { return (S.n == S.N) ? 1 : 0; } void destroycoupons ( coupons *S ) { free(S -> A); } #include "choco.c"