50185. Hitting set, part I
難度:2/51
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43#include <stdio.h>
#include <stdbool.h>
#include <stdint.h>
#include "set.h"
// typedef struct set{
// uint64_t ppl;
// int cnt;
// int max_el;
// }Set;
void initializeSet(Set* set, int numberOfElement){
set->ppl = 0;
set->cnt = 0;
set->max_el = numberOfElement;
}
bool intersect(Set set1, Set set2){
return ((set1.ppl & set2.ppl) != 0);
}
void addElement(Set* set, int element){
element--;
(set->ppl) |= ((uint64_t)1 << element);
set->cnt++;
}
void removeElement(Set* set, int element){
element--;
(set->ppl) &= (~((uint64_t)1 << element));
set->cnt--;
}
void printSet(Set set){
int n = 0;
for(int i = 0; i < set.max_el; i++){
if((set.ppl >> i) & 1 == 1){
printf("%d%c", i + 1, (n == set.cnt - 1) ? '\n' : ' ');
n++;
}
}
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16#include <stdio.h>
#include <stdbool.h>
#include <stdint.h>
typedef struct set{
uint64_t ppl;
int cnt;
int max_el;
}Set;
void initializeSet(Set* set, int numberOfElement);
bool intersect(Set set1, Set set2);
void addElement(Set* set, int element);
void removeElement(Set* set, int element);
void printSet(Set set);