回答編集履歴
15
関数名修正
answer
CHANGED
@@ -9,7 +9,7 @@
|
|
9
9
|
bits = (bits & 0b00011111000000000000000000011111) + (bits >> 12 & 0b00000000000000000000000000011111);
|
10
10
|
return (bits & 0b00000000000000000000000000111111) + (bits >> 24 & 0b00000000000000000000000000111111);
|
11
11
|
}
|
12
|
-
int
|
12
|
+
int countGreaterThanOrEqualTo1(unsigned int bits)
|
13
13
|
{
|
14
14
|
bits |= (bits & 0b00010010010010010010010010010010)>> 1;
|
15
15
|
bits |= (bits & 0b00100100100100100100100100100100)>> 2;
|
@@ -18,7 +18,7 @@
|
|
18
18
|
bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);
|
19
19
|
return (bits & 0b00000000000000000000000000001111) + (bits >> 24 & 0b00000000000000000000000000001111);
|
20
20
|
}
|
21
|
-
int
|
21
|
+
int countGreaterThanOrEqualTo2(unsigned int bits)
|
22
22
|
{
|
23
23
|
bits >>= 1;
|
24
24
|
bits |= bits >> 1;
|
@@ -49,7 +49,7 @@
|
|
49
49
|
bits = (bits & 0b00011111000000000000000000011111) + (bits >> 12 & 0b00000000000000000000000000011111);
|
50
50
|
return (bits & 0b00000000000000000000000000111111) + (bits >> 24 & 0b00000000000000000000000000111111);
|
51
51
|
}
|
52
|
-
int
|
52
|
+
int countGreaterThanOrEqualTo1(unsigned int bits)
|
53
53
|
{
|
54
54
|
bits |= (bits & 0b00000010010010010010010010010010) >> 1;
|
55
55
|
bits |= (bits & 0b00000100100100100100100100100100) >> 2;
|
@@ -58,7 +58,7 @@
|
|
58
58
|
bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);
|
59
59
|
return (bits & 0b00000000000000000000000000001111) + (bits >> 24 & 0b00000000000000000000000000001111);
|
60
60
|
}
|
61
|
-
int
|
61
|
+
int countGreaterThanOrEqualTo2(unsigned int bits)
|
62
62
|
{
|
63
63
|
bits |= bits >> 1;
|
64
64
|
bits >>= 1;
|
14
ビット演算修正
answer
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
{
|
7
7
|
bits = (bits & 0b00000111000111000111000111000111) + (bits >> 3 & 0b00000111000111000111000111000111);
|
8
8
|
bits = (bits & 0b00001111000000001111000000001111) + (bits >> 6 & 0b00000000000000001111000000001111);
|
9
|
-
bits = (bits & 0b00011111000000000000000000011111) + (bits >> 12 &
|
9
|
+
bits = (bits & 0b00011111000000000000000000011111) + (bits >> 12 & 0b00000000000000000000000000011111);
|
10
10
|
return (bits & 0b00000000000000000000000000111111) + (bits >> 24 & 0b00000000000000000000000000111111);
|
11
11
|
}
|
12
12
|
int countGreaterThan1(unsigned int bits)
|
@@ -46,7 +46,7 @@
|
|
46
46
|
{
|
47
47
|
bits = (bits & 0b00000111000111000111000111000111) + (bits >> 3 & 0b00000000000111000111000111000111);
|
48
48
|
bits = (bits & 0b00001111000000001111000000001111) + (bits >> 6 & 0b00000000000000001111000000001111);
|
49
|
-
bits = (bits & 0b00011111000000000000000000011111) + (bits >> 12 &
|
49
|
+
bits = (bits & 0b00011111000000000000000000011111) + (bits >> 12 & 0b00000000000000000000000000011111);
|
50
50
|
return (bits & 0b00000000000000000000000000111111) + (bits >> 24 & 0b00000000000000000000000000111111);
|
51
51
|
}
|
52
52
|
int countGreaterThan1(unsigned int bits)
|
13
コード修正
answer
CHANGED
@@ -7,7 +7,7 @@
|
|
7
7
|
bits = (bits & 0b00000111000111000111000111000111) + (bits >> 3 & 0b00000111000111000111000111000111);
|
8
8
|
bits = (bits & 0b00001111000000001111000000001111) + (bits >> 6 & 0b00000000000000001111000000001111);
|
9
9
|
bits = (bits & 0b00011111000000000000000000011111) + (bits >> 12 & 0b00000000000000000000000000001111);
|
10
|
-
return (bits & 0b00000000000000000000000000111111) + (bits >> 24
|
10
|
+
return (bits & 0b00000000000000000000000000111111) + (bits >> 24 & 0b00000000000000000000000000111111);
|
11
11
|
}
|
12
12
|
int countGreaterThan1(unsigned int bits)
|
13
13
|
{
|
@@ -16,7 +16,7 @@
|
|
16
16
|
bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000001000001000001000001000001);
|
17
17
|
bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6 & 0b00000000000000000011000000000011);
|
18
18
|
bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);
|
19
|
-
return (bits & 0b00000000000000000000000000001111) + (bits >> 24
|
19
|
+
return (bits & 0b00000000000000000000000000001111) + (bits >> 24 & 0b00000000000000000000000000001111);
|
20
20
|
}
|
21
21
|
int countGreaterThan2(unsigned int bits)
|
22
22
|
{
|
@@ -25,7 +25,7 @@
|
|
25
25
|
bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000001000001000001000001000001);
|
26
26
|
bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6 & 0b00000000000000000011000000000011);
|
27
27
|
bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);
|
28
|
-
return (bits & 0b00000000000000000000000000001111) + (bits >> 24
|
28
|
+
return (bits & 0b00000000000000000000000000001111) + (bits >> 24 & 0b00000000000000000000000000001111);
|
29
29
|
}
|
30
30
|
int count2(unsigned int bits)
|
31
31
|
{
|
@@ -35,19 +35,19 @@
|
|
35
35
|
bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000001000001000001000001000001);
|
36
36
|
bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6 & 0b00000000000000000011000000000011);
|
37
37
|
bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);
|
38
|
-
return 10 - ((bits & 0b00000000000000000000000000001111) + (bits >> 24
|
38
|
+
return 10 - ((bits & 0b00000000000000000000000000001111) + (bits >> 24 & 0b00000000000000000000000000001111));
|
39
39
|
}
|
40
40
|
```
|
41
41
|
すみません、上記コードは30bit(a[9])まで使用していました。
|
42
42
|
上位bitが0で埋まっていれば同じですが、27bitまでの場合は以下コードで。
|
43
|
-
どちらのコードも上位ビットが0なら`
|
43
|
+
どちらのコードも上位ビットが0なら`bits >> 24`のあとの`& 0b~`は不要です。
|
44
44
|
```C++
|
45
45
|
int sum(unsigned int bits)
|
46
46
|
{
|
47
47
|
bits = (bits & 0b00000111000111000111000111000111) + (bits >> 3 & 0b00000000000111000111000111000111);
|
48
48
|
bits = (bits & 0b00001111000000001111000000001111) + (bits >> 6 & 0b00000000000000001111000000001111);
|
49
49
|
bits = (bits & 0b00011111000000000000000000011111) + (bits >> 12 & 0b00000000000000000000000000001111);
|
50
|
-
return (bits & 0b00000000000000000000000000111111) + (bits >> 24
|
50
|
+
return (bits & 0b00000000000000000000000000111111) + (bits >> 24 & 0b00000000000000000000000000111111);
|
51
51
|
}
|
52
52
|
int countGreaterThan1(unsigned int bits)
|
53
53
|
{
|
@@ -56,7 +56,7 @@
|
|
56
56
|
bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000000000001000001000001000001);
|
57
57
|
bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6 & 0b00000000000000000011000000000011);
|
58
58
|
bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);
|
59
|
-
return (bits & 0b00000000000000000000000000001111) + (bits >> 24
|
59
|
+
return (bits & 0b00000000000000000000000000001111) + (bits >> 24 & 0b00000000000000000000000000001111);
|
60
60
|
}
|
61
61
|
int countGreaterThan2(unsigned int bits)
|
62
62
|
{
|
@@ -65,7 +65,7 @@
|
|
65
65
|
bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000000000001000001000001000001);
|
66
66
|
bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6 & 0b00000000000000000011000000000011);
|
67
67
|
bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);
|
68
|
-
return (bits & 0b00000000000000000000000000001111) + (bits >> 24
|
68
|
+
return (bits & 0b00000000000000000000000000001111) + (bits >> 24 & 0b00000000000000000000000000001111);
|
69
69
|
}
|
70
70
|
int count2(unsigned int bits)
|
71
71
|
{
|
@@ -75,6 +75,6 @@
|
|
75
75
|
bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000000000001000001000001000001);
|
76
76
|
bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6 & 0b00000000000000000011000000000011);
|
77
77
|
bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);
|
78
|
-
return 9 - ((bits & 0b00000000000000000000000000001111) + (bits >> 24
|
78
|
+
return 9 - ((bits & 0b00000000000000000000000000001111) + (bits >> 24 & 0b00000000000000000000000000001111));
|
79
79
|
}
|
80
80
|
```
|
12
不定値の場合のコード修正
answer
CHANGED
@@ -7,7 +7,7 @@
|
|
7
7
|
bits = (bits & 0b00000111000111000111000111000111) + (bits >> 3 & 0b00000111000111000111000111000111);
|
8
8
|
bits = (bits & 0b00001111000000001111000000001111) + (bits >> 6 & 0b00000000000000001111000000001111);
|
9
9
|
bits = (bits & 0b00011111000000000000000000011111) + (bits >> 12 & 0b00000000000000000000000000001111);
|
10
|
-
return (bits & 0b00000000000000000000000000111111) + (bits >> 24);
|
10
|
+
return (bits & 0b00000000000000000000000000111111) + (bits >> 24) & 0b00000000000000000000000000111111;
|
11
11
|
}
|
12
12
|
int countGreaterThan1(unsigned int bits)
|
13
13
|
{
|
@@ -16,7 +16,7 @@
|
|
16
16
|
bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000001000001000001000001000001);
|
17
17
|
bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6 & 0b00000000000000000011000000000011);
|
18
18
|
bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);
|
19
|
-
return (bits & 0b00000000000000000000000000001111) + (bits >> 24);
|
19
|
+
return (bits & 0b00000000000000000000000000001111) + (bits >> 24) & 0b00000000000000000000000000001111;
|
20
20
|
}
|
21
21
|
int countGreaterThan2(unsigned int bits)
|
22
22
|
{
|
@@ -25,7 +25,7 @@
|
|
25
25
|
bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000001000001000001000001000001);
|
26
26
|
bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6 & 0b00000000000000000011000000000011);
|
27
27
|
bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);
|
28
|
-
return (bits & 0b00000000000000000000000000001111) + (bits >> 24);
|
28
|
+
return (bits & 0b00000000000000000000000000001111) + (bits >> 24) & 0b00000000000000000000000000001111;
|
29
29
|
}
|
30
30
|
int count2(unsigned int bits)
|
31
31
|
{
|
@@ -35,18 +35,19 @@
|
|
35
35
|
bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000001000001000001000001000001);
|
36
36
|
bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6 & 0b00000000000000000011000000000011);
|
37
37
|
bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);
|
38
|
-
return 10 - ((bits & 0b00000000000000000000000000001111) + (bits >> 24));
|
38
|
+
return 10 - ((bits & 0b00000000000000000000000000001111) + (bits >> 24) & 0b00000000000000000000000000001111);
|
39
39
|
}
|
40
40
|
```
|
41
41
|
すみません、上記コードは30bit(a[9])まで使用していました。
|
42
|
-
|
42
|
+
上位bitが0で埋まっていれば同じですが、27bitまでの場合は以下コードで。
|
43
|
+
どちらのコードも上位ビットが0なら`(bits >> 24)`のあとの`& 0b~`は不要です。
|
43
44
|
```C++
|
44
45
|
int sum(unsigned int bits)
|
45
46
|
{
|
46
47
|
bits = (bits & 0b00000111000111000111000111000111) + (bits >> 3 & 0b00000000000111000111000111000111);
|
47
48
|
bits = (bits & 0b00001111000000001111000000001111) + (bits >> 6 & 0b00000000000000001111000000001111);
|
48
49
|
bits = (bits & 0b00011111000000000000000000011111) + (bits >> 12 & 0b00000000000000000000000000001111);
|
49
|
-
return (bits & 0b00000000000000000000000000111111) + (bits >> 24);
|
50
|
+
return (bits & 0b00000000000000000000000000111111) + (bits >> 24) & 0b00000000000000000000000000111111;
|
50
51
|
}
|
51
52
|
int countGreaterThan1(unsigned int bits)
|
52
53
|
{
|
@@ -55,7 +56,7 @@
|
|
55
56
|
bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000000000001000001000001000001);
|
56
57
|
bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6 & 0b00000000000000000011000000000011);
|
57
58
|
bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);
|
58
|
-
return (bits & 0b00000000000000000000000000001111) + (bits >> 24);
|
59
|
+
return (bits & 0b00000000000000000000000000001111) + (bits >> 24) & 0b00000000000000000000000000001111;
|
59
60
|
}
|
60
61
|
int countGreaterThan2(unsigned int bits)
|
61
62
|
{
|
@@ -64,7 +65,7 @@
|
|
64
65
|
bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000000000001000001000001000001);
|
65
66
|
bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6 & 0b00000000000000000011000000000011);
|
66
67
|
bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);
|
67
|
-
return (bits & 0b00000000000000000000000000001111) + (bits >> 24);
|
68
|
+
return (bits & 0b00000000000000000000000000001111) + (bits >> 24) & 0b00000000000000000000000000001111;
|
68
69
|
}
|
69
70
|
int count2(unsigned int bits)
|
70
71
|
{
|
@@ -74,6 +75,6 @@
|
|
74
75
|
bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000000000001000001000001000001);
|
75
76
|
bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6 & 0b00000000000000000011000000000011);
|
76
77
|
bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);
|
77
|
-
return 9 - ((bits & 0b00000000000000000000000000001111) + (bits >> 24));
|
78
|
+
return 9 - ((bits & 0b00000000000000000000000000001111) + (bits >> 24) & 0b00000000000000000000000000001111);
|
78
79
|
}
|
79
80
|
```
|
11
28-30bitを計算対象としていたので修正コードを追記
answer
CHANGED
@@ -37,4 +37,43 @@
|
|
37
37
|
bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);
|
38
38
|
return 10 - ((bits & 0b00000000000000000000000000001111) + (bits >> 24));
|
39
39
|
}
|
40
|
+
```
|
41
|
+
すみません、上記コードは30bit(a[9])まで使用していました。
|
42
|
+
28-30bitが0で埋まっていれば同じですが、不定値の可能性があるなら以下コードで。
|
43
|
+
```C++
|
44
|
+
int sum(unsigned int bits)
|
45
|
+
{
|
46
|
+
bits = (bits & 0b00000111000111000111000111000111) + (bits >> 3 & 0b00000000000111000111000111000111);
|
47
|
+
bits = (bits & 0b00001111000000001111000000001111) + (bits >> 6 & 0b00000000000000001111000000001111);
|
48
|
+
bits = (bits & 0b00011111000000000000000000011111) + (bits >> 12 & 0b00000000000000000000000000001111);
|
49
|
+
return (bits & 0b00000000000000000000000000111111) + (bits >> 24);
|
50
|
+
}
|
51
|
+
int countGreaterThan1(unsigned int bits)
|
52
|
+
{
|
53
|
+
bits |= (bits & 0b00000010010010010010010010010010) >> 1;
|
54
|
+
bits |= (bits & 0b00000100100100100100100100100100) >> 2;
|
55
|
+
bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000000000001000001000001000001);
|
56
|
+
bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6 & 0b00000000000000000011000000000011);
|
57
|
+
bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);
|
58
|
+
return (bits & 0b00000000000000000000000000001111) + (bits >> 24);
|
59
|
+
}
|
60
|
+
int countGreaterThan2(unsigned int bits)
|
61
|
+
{
|
62
|
+
bits |= bits >> 1;
|
63
|
+
bits >>= 1;
|
64
|
+
bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000000000001000001000001000001);
|
65
|
+
bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6 & 0b00000000000000000011000000000011);
|
66
|
+
bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);
|
67
|
+
return (bits & 0b00000000000000000000000000001111) + (bits >> 24);
|
68
|
+
}
|
69
|
+
int count2(unsigned int bits)
|
70
|
+
{
|
71
|
+
bits ^= 0b00000010010010010010010010010010;
|
72
|
+
bits |= (bits & 0b00000010010010010010010010010010) >> 1;
|
73
|
+
bits |= (bits & 0b00000100100100100100100100100100) >> 2;
|
74
|
+
bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000000000001000001000001000001);
|
75
|
+
bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6 & 0b00000000000000000011000000000011);
|
76
|
+
bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);
|
77
|
+
return 9 - ((bits & 0b00000000000000000000000000001111) + (bits >> 24));
|
78
|
+
}
|
40
79
|
```
|
10
2以上を求める際の&演算を一回削減
answer
CHANGED
@@ -20,7 +20,6 @@
|
|
20
20
|
}
|
21
21
|
int countGreaterThan2(unsigned int bits)
|
22
22
|
{
|
23
|
-
bits &= 0b00110110110110110110110110110110;
|
24
23
|
bits >>= 1;
|
25
24
|
bits |= bits >> 1;
|
26
25
|
bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000001000001000001000001000001);
|
9
2以上を求める際の&演算を一回削減
answer
CHANGED
@@ -22,7 +22,7 @@
|
|
22
22
|
{
|
23
23
|
bits &= 0b00110110110110110110110110110110;
|
24
24
|
bits >>= 1;
|
25
|
-
bits |=
|
25
|
+
bits |= bits >> 1;
|
26
26
|
bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000001000001000001000001000001);
|
27
27
|
bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6 & 0b00000000000000000011000000000011);
|
28
28
|
bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);
|
8
不要なビット演算を除去
answer
CHANGED
@@ -7,7 +7,7 @@
|
|
7
7
|
bits = (bits & 0b00000111000111000111000111000111) + (bits >> 3 & 0b00000111000111000111000111000111);
|
8
8
|
bits = (bits & 0b00001111000000001111000000001111) + (bits >> 6 & 0b00000000000000001111000000001111);
|
9
9
|
bits = (bits & 0b00011111000000000000000000011111) + (bits >> 12 & 0b00000000000000000000000000001111);
|
10
|
-
return (bits & 0b00000000000000000000000000111111) + (bits >> 24
|
10
|
+
return (bits & 0b00000000000000000000000000111111) + (bits >> 24);
|
11
11
|
}
|
12
12
|
int countGreaterThan1(unsigned int bits)
|
13
13
|
{
|
@@ -16,7 +16,7 @@
|
|
16
16
|
bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000001000001000001000001000001);
|
17
17
|
bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6 & 0b00000000000000000011000000000011);
|
18
18
|
bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);
|
19
|
-
return (bits & 0b00000000000000000000000000001111) + (bits >> 24
|
19
|
+
return (bits & 0b00000000000000000000000000001111) + (bits >> 24);
|
20
20
|
}
|
21
21
|
int countGreaterThan2(unsigned int bits)
|
22
22
|
{
|
@@ -26,7 +26,7 @@
|
|
26
26
|
bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000001000001000001000001000001);
|
27
27
|
bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6 & 0b00000000000000000011000000000011);
|
28
28
|
bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);
|
29
|
-
return (bits & 0b00000000000000000000000000001111) + (bits >> 24
|
29
|
+
return (bits & 0b00000000000000000000000000001111) + (bits >> 24);
|
30
30
|
}
|
31
31
|
int count2(unsigned int bits)
|
32
32
|
{
|
@@ -36,6 +36,6 @@
|
|
36
36
|
bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000001000001000001000001000001);
|
37
37
|
bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6 & 0b00000000000000000011000000000011);
|
38
38
|
bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);
|
39
|
-
return 10 - ((bits & 0b00000000000000000000000000001111) + (bits >> 24
|
39
|
+
return 10 - ((bits & 0b00000000000000000000000000001111) + (bits >> 24));
|
40
40
|
}
|
41
41
|
```
|
7
2の要素数について追記
answer
CHANGED
@@ -28,4 +28,14 @@
|
|
28
28
|
bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);
|
29
29
|
return (bits & 0b00000000000000000000000000001111) + (bits >> 24 & 0b00000000000000000000000000001111);
|
30
30
|
}
|
31
|
+
int count2(unsigned int bits)
|
32
|
+
{
|
33
|
+
bits ^= 0b00010010010010010010010010010010;
|
34
|
+
bits |= (bits & 0b00010010010010010010010010010010) >> 1;
|
35
|
+
bits |= (bits & 0b00100100100100100100100100100100) >> 2;
|
36
|
+
bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000001000001000001000001000001);
|
37
|
+
bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6 & 0b00000000000000000011000000000011);
|
38
|
+
bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);
|
39
|
+
return 10 - ((bits & 0b00000000000000000000000000001111) + (bits >> 24 & 0b00000000000000000000000000001111));
|
40
|
+
}
|
31
41
|
```
|
6
ビット演算修正
answer
CHANGED
@@ -11,8 +11,8 @@
|
|
11
11
|
}
|
12
12
|
int countGreaterThan1(unsigned int bits)
|
13
13
|
{
|
14
|
-
bits |= bits >> 1;
|
14
|
+
bits |= (bits & 0b00010010010010010010010010010010)>> 1;
|
15
|
-
bits |= bits >> 2;
|
15
|
+
bits |= (bits & 0b00100100100100100100100100100100)>> 2;
|
16
16
|
bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000001000001000001000001000001);
|
17
17
|
bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6 & 0b00000000000000000011000000000011);
|
18
18
|
bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);
|
@@ -22,7 +22,7 @@
|
|
22
22
|
{
|
23
23
|
bits &= 0b00110110110110110110110110110110;
|
24
24
|
bits >>= 1;
|
25
|
-
bits |= bits >> 1;
|
25
|
+
bits |= (bits & 0b00010010010010010010010010010010) >> 1;
|
26
26
|
bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000001000001000001000001000001);
|
27
27
|
bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6 & 0b00000000000000000011000000000011);
|
28
28
|
bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);
|
5
ビット演算修正
answer
CHANGED
@@ -12,7 +12,7 @@
|
|
12
12
|
int countGreaterThan1(unsigned int bits)
|
13
13
|
{
|
14
14
|
bits |= bits >> 1;
|
15
|
-
bits |= bits >>
|
15
|
+
bits |= bits >> 2;
|
16
16
|
bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000001000001000001000001000001);
|
17
17
|
bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6 & 0b00000000000000000011000000000011);
|
18
18
|
bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);
|
4
ビット演算修正
answer
CHANGED
@@ -5,17 +5,17 @@
|
|
5
5
|
int sum(unsigned int bits)
|
6
6
|
{
|
7
7
|
bits = (bits & 0b00000111000111000111000111000111) + (bits >> 3 & 0b00000111000111000111000111000111);
|
8
|
-
bits = (bits & 0b00001111000000001111000000001111) + (bits >> 6 &
|
8
|
+
bits = (bits & 0b00001111000000001111000000001111) + (bits >> 6 & 0b00000000000000001111000000001111);
|
9
|
-
bits = (bits & 0b00011111000000000000000000011111) + (bits >> 12 &
|
9
|
+
bits = (bits & 0b00011111000000000000000000011111) + (bits >> 12 & 0b00000000000000000000000000001111);
|
10
10
|
return (bits & 0b00000000000000000000000000111111) + (bits >> 24 & 0b00000000000000000000000000111111);
|
11
11
|
}
|
12
12
|
int countGreaterThan1(unsigned int bits)
|
13
13
|
{
|
14
14
|
bits |= bits >> 1;
|
15
15
|
bits |= bits >> 1;
|
16
|
-
bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3
|
16
|
+
bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000001000001000001000001000001);
|
17
|
-
bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6
|
17
|
+
bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6 & 0b00000000000000000011000000000011);
|
18
|
-
bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 &
|
18
|
+
bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);
|
19
19
|
return (bits & 0b00000000000000000000000000001111) + (bits >> 24 & 0b00000000000000000000000000001111);
|
20
20
|
}
|
21
21
|
int countGreaterThan2(unsigned int bits)
|
@@ -23,9 +23,9 @@
|
|
23
23
|
bits &= 0b00110110110110110110110110110110;
|
24
24
|
bits >>= 1;
|
25
25
|
bits |= bits >> 1;
|
26
|
-
bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3
|
26
|
+
bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000001000001000001000001000001);
|
27
|
-
bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6
|
27
|
+
bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6 & 0b00000000000000000011000000000011);
|
28
|
-
bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 &
|
28
|
+
bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000000000000000000000000000111);
|
29
29
|
return (bits & 0b00000000000000000000000000001111) + (bits >> 24 & 0b00000000000000000000000000001111);
|
30
30
|
}
|
31
31
|
```
|
3
スペル修正
answer
CHANGED
@@ -9,7 +9,7 @@
|
|
9
9
|
bits = (bits & 0b00011111000000000000000000011111) + (bits >> 12 & 0b00001111000000000000000000001111);
|
10
10
|
return (bits & 0b00000000000000000000000000111111) + (bits >> 24 & 0b00000000000000000000000000111111);
|
11
11
|
}
|
12
|
-
int
|
12
|
+
int countGreaterThan1(unsigned int bits)
|
13
13
|
{
|
14
14
|
bits |= bits >> 1;
|
15
15
|
bits |= bits >> 1;
|
@@ -18,7 +18,7 @@
|
|
18
18
|
bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000111000000000000000000000111);
|
19
19
|
return (bits & 0b00000000000000000000000000001111) + (bits >> 24 & 0b00000000000000000000000000001111);
|
20
20
|
}
|
21
|
-
int
|
21
|
+
int countGreaterThan2(unsigned int bits)
|
22
22
|
{
|
23
23
|
bits &= 0b00110110110110110110110110110110;
|
24
24
|
bits >>= 1;
|
2
2以上カウント追記
answer
CHANGED
@@ -18,4 +18,14 @@
|
|
18
18
|
bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000111000000000000000000000111);
|
19
19
|
return (bits & 0b00000000000000000000000000001111) + (bits >> 24 & 0b00000000000000000000000000001111);
|
20
20
|
}
|
21
|
+
int countGraterThan2(unsigned int bits)
|
22
|
+
{
|
23
|
+
bits &= 0b00110110110110110110110110110110;
|
24
|
+
bits >>= 1;
|
25
|
+
bits |= bits >> 1;
|
26
|
+
bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000001000001000001000001000001);
|
27
|
+
bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6 & 0b00000011000000000011000000000011);
|
28
|
+
bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000111000000000000000000000111);
|
29
|
+
return (bits & 0b00000000000000000000000000001111) + (bits >> 24 & 0b00000000000000000000000000001111);
|
30
|
+
}
|
21
31
|
```
|
1
1以上カウント追記
answer
CHANGED
@@ -9,4 +9,13 @@
|
|
9
9
|
bits = (bits & 0b00011111000000000000000000011111) + (bits >> 12 & 0b00001111000000000000000000001111);
|
10
10
|
return (bits & 0b00000000000000000000000000111111) + (bits >> 24 & 0b00000000000000000000000000111111);
|
11
11
|
}
|
12
|
+
int countGraterThan1(unsigned int bits)
|
13
|
+
{
|
14
|
+
bits |= bits >> 1;
|
15
|
+
bits |= bits >> 1;
|
16
|
+
bits = (bits & 0b00000001000001000001000001000001) + (bits >> 3 & 0b00000001000001000001000001000001);
|
17
|
+
bits = (bits & 0b00000011000000000011000000000011) + (bits >> 6 & 0b00000011000000000011000000000011);
|
18
|
+
bits = (bits & 0b00000111000000000000000000000111) + (bits >> 12 & 0b00000111000000000000000000000111);
|
19
|
+
return (bits & 0b00000000000000000000000000001111) + (bits >> 24 & 0b00000000000000000000000000001111);
|
20
|
+
}
|
12
21
|
```
|