题目大意:


给出x,y,问1~x之间有多少组数两两相同位数超过y(都是指二进制下)

思路: 利用vector存储一下各数二进制的信息,暴力判断即可。

#include <cstdio>
#include <iostream>
#include <vector>

using namespace std;

const int N = 2e3 + 10;
int n, k, t, f[N], cnt, ans, maxx;
vector <int> vec[N];

bool check(int x, int y)
{
	maxx = cnt = 0;
	vector <int> a = vec[x], b = vec[y];
	int len1 = a.size(), len2 = b.size();
	for(int i = 0 ; i < len1; i++)
	{
		cnt = 0;
		for(int j = 0; j < len2 && i + j < len1; j++)
		{
			if(a[i + j] == b[j]) cnt++;
			else maxx = max(cnt, maxx), cnt = 0;
			//printf("%d\n", cnt);
		}
		maxx = max(cnt, maxx);
	}
	return (maxx >= k);
	
}

int main()
{
	scanf("%d%d", &n, &k);
	for(int i = 1; i <= n; i++)
	{
		t = i;
		while(t) vec[i].push_back(t % 2), t /= 2;
	}
	for(int i = 1; i <= n; i++)
	 for(int j = i + 1; j <= n; j++)
		if(check(i, j) || check(j, i)) ans++;
	printf("%d\n", ans);
	return 0;
}