あなたがジョージとアレックスの寮への引っ越しを手伝った後、彼らは友人のヒョードルが新しいコンピューター ゲーム「Call of Soldiers 3」をプレイするのを手伝いに行きました。
このゲームには (m?+?1) 人のプレイヤーと n 人がいます。合計の兵士の種類。プレイヤー「Call of Soldiers 3」には、1 から (m?+?1) までの番号が付けられます。兵士の種類には 0 から n?-?1 までの番号が付けられます。各プレイヤーは軍隊を持っています。 i 番目のプレイヤーの軍隊は、非負の整数 xi で表すことができます。 xi の 2 進表現を考えてみましょう。数値 xi の j 番目のビットが 1 に等しい場合、i 番目のプレイヤーの軍隊には j 番目のタイプの兵士がいます。
ヒョードルはゲームの (m?+?1) 番目のプレーヤーです。彼は、2 人のプレイヤーが軍隊の兵士の種類が最大で k 種類だけ異なっていれば、友人になれると仮定しています (つまり、対応する数値のバイナリ表現が最大で k ビットで異なっている)。ヒョードルを助けて、何人の選手が彼の友達になれるかを数えてください。
入力
最初の行には、3 つの整数 n、m、k (1?≤?k?≤?n?≤?20; 1?≤?m) が含まれています。 ?≤?1000).
次の (m?+?1) 行の i 番目には、i 番目の整数 xi (1?≤?xi?≤?2n?-?1) が含まれます。プレイヤーの軍隊。ヒョードルが (m?+?1) 番目のプレーヤーであることを思い出してください。
出力
単一の整数を出力します ?ヒョードルの潜在的な友人の数。
サンプル テスト
入力
7 3 18511117
出力
入力
3 3 31234
出力
3题意:给你m+1个数让你判断所给的数的二进制形式与第m+1个数不想同的位数是否小于等于k,累计答案思路:题意题<pre name="code" class="n">#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int maxn = 1010;int num[maxn], cnt;int main() { int n, m, k; scanf("%d%d%d", &n, &m, &k); for (int i = 0; i < m; i++) scanf("%d", &num[i]); scanf("%d", &cnt); int ans = 0; for (int i = 0; i < m; i++) { int cur = 0; for (int j = 0; j < n; j++) if (((1<<j)&num[i]) != ((1<<j)&cnt)) cur++; if (cur <= k) ans++; } printf("%d\n", ans); return 0;}