C 数字匹配
题目大意:
给出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;
}