【23届秋招】0828-文远知行C++测试开发工程师笔试

本文分享了0828文远知行的笔试经历,包括三道编程题的详细描述和部分解题思路。第一题涉及在二维平面上找出最多同一直线上的点数,通过计算斜率实现;第二题为矩阵操作,要求处理连通块的移动避免碰撞或越界;第三题是糖果分配问题,采用贪心策略解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0828 文远笔试(三道编程题)

前言

前面一直在实习,没开始投简历,终于实习跑路开始投简历了

第一题

题意:在一个二维平面上给你 n n n个点,用坐标 ( x , y ) (x,y) (x,y)表示,问最多有多少个点在同一直线上。
做题过程:很久没刷题了,没有在第一时间想到正解,没有明显的思路,就去做第三题了,回头做的时候像不出什么好的想法,就先想用暴力骗分,当暴力写出来的时候也想到了正解,不过暴力只能过 50 % 50\% 50%(纯暴力,不优化)。,
思路:这道题不能直接求某一个线段上有多少个点。需要换一个思路,都知道两个点可以确定一条直线,一条直线就存在他的斜率,我们定义三个点 A , B , C A,B,C A,B,C如果直线AB的斜率和直线AC的斜率相同,那么ABC三点就在同一条直线上,(这个思路居然是我写暴力的时候猛然想到的,看来不刷题真的是会退步的)。这样就很好办了,枚举一个点和其他点的斜率,记录不同每个斜率出现了多少次,然后求最大值就好;
暴力代码(50%)

#include<bits/stdc++.h>
using namespace std;
struct Point{
   
	Point(int x_=0,int y_=0):x(x_),y(y_){
   };
	int x,y;
	bool operator<(const Point &t)const{
   
	if(t.x==x){
   
		return y<t.y;
	}
	else return x<t.x;
	}
};
struct k_and_b{
   
	int x,y,b;
	bool operator <(const k_and_b &t)const {
   
		if(x==t.x&&y==t.y)
			return b<t.b;
		else if(x==t.x)
			return y<t.y;
		else return x<t.x;
	}
};
int main()
{
   	

	int n;
	int x,y,ans=0,cnt_x_0=0,cnt_y_0=0;
	scanf("%d",&n);
	vector<Point>point;
	
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值