暴力枚举解两条斜线问题

Posted 勇敢*牛牛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了暴力枚举解两条斜线问题相关的知识,希望对你有一定的参考价值。

平面上有n个点,现在你需要建造两条路,一条是斜率为1,
另一条斜率为-1
你的任务是让这两条路经过尽可能多的点
求最多经过几个点

题目:斜率为±1的两条直线最多经过几个点,并输出。
解题思路

  • 那么我们可以有方程斜率为1的直线为y=x+b1
  • 斜率为-1的直线为y=-x+b2
  • 可以得出b1=y-x,b2=y+x
  • 如果b1或b2相同,则点在这两条直线上
  • 因此问题变成了最多有几个点的b1或b2相同
  • 那么枚举b1b2即可
#include <stdio.h>
#include <stdlib.h>
int main() {
	int N=0;
	int x[1000]={0};
	int y[1000]={0};
	int i,j,k,max=0; 
	scanf("%d",&N);
	for(i=0;i<N;i++){
		scanf("%d",&x[i]);
	}
	for(j=0;j<N;j++){
		scanf("%d",&y[j]);
	}
	for(i=0;i<N;i++){
		int b1 = y[i]-x[i];
		for(j=0;j<N;j++){
			int b2 = y[j]+x[j];
			int count=0;
			for(k=0;k<N;k++){
				if(b1 == y[k]-x[k] || b2 == y[k]+x[k]){
					count++;
				}			
			}
			if(max<count){
				max = count;
			} 
		}
	}
	printf("%d",max);
	return 0;
}

以上是关于暴力枚举解两条斜线问题的主要内容,如果未能解决你的问题,请参考以下文章

SRM13

蓝桥系列212道「暴力枚举」真题,夯实你的刷题基本功(暴力枚举模板)

poj 2585 Window Pains 暴力枚举排列

AcWing 1855. 愤怒的奶牛(枚举+暴力)

leetcode打卡--301. 删除无效的括号(预处理的暴力枚举)

hdu-2328(暴力枚举+kmp)