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;
}
全部评论

相关推荐

程序员牛肉:这一眼假啊,基本上都是骗人的,不然就涉及到职位贪腐了,就像之前华为的OD事件,看你运气好不好了
点赞 评论 收藏
分享
05-12 11:09
已编辑
门头沟学院 后端
已注销:没必要放这么多专业技能的描述。这些应该是默认已会的,写这么多行感觉在凑内容。项目这块感觉再包装包装吧,换个名字,虽然大家的项目基本都是网上套壳的,但是你这也太明显了。放一个业务项目,再放一个技术项目。技术项目,例如中间件的一些扩展和尝试。
简历中的项目经历要怎么写
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务