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;for(int i=1;i<=n;i++){scanf("%d,%d",&x,&y);point.push_back(Point(x,y));}sort(point.begin(),point.end());map<int,bool>usex;map<k_and_b,bool>usekb;for(int i=0;i<n;i++){for(int j=i+1;j<n;j++){if(point[i].x==point[j].x&&usex[point[i].x]==0){usex[point[i].x]=1;int cnt=2;for(int k=0;k<n;k++){if(point[k].x==point[j].x)cnt++;//if((point[i].y-point[k].y)*())}ans=max(cnt,ans);}else {int cnt=0;for(int k=0;k<n;k++){int x1=point[j].x-point[k].x;int y1=point[j].y-point[k].y;int x2=point[i].x-point[k].x;int y2=point[i].y-point[k].y;if(y1*x2==y2*x1)cnt++;}ans=max(cnt,ans);}}}printf("%d\n",ans);return 0;
}

正确代码:

#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;}elsereturn x<t.x;}
};
vector<pair<Point,int> >g[2005];
int main()
{int n;int x,y,ans=0,cnt_x_0=0,cnt_y_0=0;scanf("%d",&n);vector<Point>point;for(int i=1; i<=n; i++){scanf("%d,%d",&x,&y);point.push_back(Point(x,y));}for(int i=0; i<n; i++){int cnt=0,cntx=0,cnty=0,cnta=0;map<pair<int,int>,int>mp;for(int j=0; j<n; j++){if(i==j)continue;if(point[i].x==point[j].x&&point[i].y==point[j].y){cnt++;continue;}if(point[i].x==point[j].x){cntx++;continue;}if(point[i].y==point[j].y){cnty++;}int x=point[i].x-point[j].x;int y=point[i].y-point[j].y;int g=__gcd(x,y);x/=g;y/=g;cnt=max(cnt,++mp[make_pair(x,y)]);}ans=max(ans,cnt+1);ans=max(ans,cntx+1);ans=max(ans,cnty+1);}cout<<ans<<endl;return 0;
}

第二题

题意:给你一个矩阵,这个矩阵每一个单元格是一个0-9的字符,0表示空白,1-9表示一种可移动的块,多个某种可移动的块组成一个连通块(一个连通块中只能有字符未1-9中的某一种块),一个连通块表示一个整体,一个字符串只对应一个连通块,现在对于某一个连通块,存在若干上下左右移动一个单元格的操作,如果移动后连通块会碰撞(重叠)或者越界,那么这次操作无效,不进行处理,请问在若干次操作后最后这个矩阵是什么样的。
思路:不会

第三题

题意:给你一个序列,这个序列表示 n n n个人的得分,现在要分糖果,满足以下两个条件,问最少需要的糖果数量是多少

  1. 每个人至少需要分到一颗糖果
  2. 如果当前人得分比左右两边某一边的人高,那么他获得的糖果数量也需要比他高

思路:这题我觉得是这题中最简单的一道题了,直接贪心就好,从得分最小人开始,按照规则分糖果就好。
代码:

#include<bits/stdc++.h>
using namespace std;
class Solution {public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param ratings int整型vector * @return int整型*/struct node{node(int val_=0,int id_=0):val(val_),id(id_){};int val,id;  };int candy(vector<int>& ratings) {// write code herevector<node>temp;int len=ratings.size();vector<int>can;can.resize(len+5);for(int i=0;i<len;i++){temp.push_back(node(ratings[i],i));}sort(temp.begin(),temp.end(),[](node a,node b){return a.val<b.val;});int ans=0;for(int i=0;i<len;i++){node now=temp[i];can[now.id]=1;if(now.id!=0&&ratings[now.id-1]<ratings[now.id])can[now.id]=max(can[now.id-1]+1,can[now.id]);if(now.id!=len-1&&ratings[now.id+1]<ratings[now.id])can[now.id]=max(can[now.id+1]+1,can[now.id]);ans+=can[now.id];}cout<<ans<<endl;}
};
int main()
{Solution a;vector<int>b={1,2,2};a.candy(b);return 0;
}

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

  1. 近万字23届秋招总结,经验汇总简历分享,希望能帮到春招的大家

    前言 本人是在大二下暑期的时候正式开始找工作的,在这段时间里从一开始的无脑莽撞到后来的步步前行,受到了很多很多好心人和大佬们优秀文档的无私帮助.学校里学到的太少太少,而求职又需要的太多太多,这些文档帮 ...

  2. 23届秋招阿里笔试算法题

    import java.util.Scanner;//23届秋招阿里笔试第一题:二进制求解(100%) public class Main1 {public static void f1(int n) ...

  3. 23届秋招百度笔试算法题

    import java.util.Scanner;//23届秋招百度笔试第一题:暴力(100%) public class Main10 {public static void main(String ...

  4. 01 | 23届秋招嵌入式岗位薪资情况汇总

    前言 针对 23 届秋招嵌入式相关岗位 offer 情况,总结了一份薪资报告,供参考. 文章目录 前言 一.嵌入式岗位薪资图示 二.嵌入式方向相对高薪的行业有哪些? 三.嵌入式学习资料 一.嵌入式岗位 ...

  5. 23届秋招,寒气逼人。。

    本文已经收录到Github仓库,该仓库包含计算机基础.Java基础.多线程.JVM.数据库.Redis.Spring.Mybatis.SpringMVC.SpringBoot.分布式.微服务.设计模式 ...

  6. 【23届秋招总结系列】一个普本23届小学弟的秋招总结,上岸金山云开发(云计算方向)

    大家好,我是路飞~ 正值秋招收尾阶段,今天很荣幸请来了交流qun小分队里的一位23届本科上岸 金山云开发工程师-云计算方向的同学,给大家分享一下他在秋招过程中的总结和心得体会. 他的博客链接:团子的守 ...

  7. 23届秋招美团内推推推!开始啦!!

    本人为 20 届应届生,在 19 年秋招期间,拿到了网易.小米.美团等企业的 Offer,最后和美团双向奔赴,在美团工作的这两年,可以说是收获满满,推荐大家来到美团这个温暖的大家庭,我们一起不畏挑战, ...

  8. 【23届秋招总结】本科小学弟成功签约滴滴后端开发offer

    大家好!我是路飞,最近工作太忙啦,断更很久,今天给大家分享一位本科23届小学弟的秋招历程- 在今年整体上就业困难,各大公司校招HC收缩的情况下,这位小学弟也历经坎坷成功拿到了滴滴后端开发岗位Offer ...

  9. 21届秋招ATL宁德新能源一面面经[数据分析工程师]

    AI面试,只能使用移动端打开. 他家9.15就给我发了面试通知,我听说很多公司AI面试是英文的,所以一直拖着没参加.前两天给我发了第三封邮件,我正好今晚有空就答了. 微信扫描二维码,可以进入面试房间. ...

最新文章

  1. readelf 读取动态链接表命令
  2. 机器学习中为啥要有验证集?只要训练集和测试集不就可以了吗?
  3. 算法的时间和空间复杂度
  4. Unity3D GUI中的图片尾随鼠标旋转脚本
  5. Android简单实现Socket通信,客户端连接服务器后,服务器向客户端发送文字数据
  6. C++数组指针不能自增1/自减1
  7. java查询出来的日期类型_Java的第29天,Oracle函数
  8. 放弃月薪过万的城市工作,返乡创业做农业,面对未知风险,你敢尝试吗?
  9. win11无法下载steam怎么办 Windows11无法下载steam的解决教程
  10. 基于python的tensorflow_Python深度学习:基于TensorFlow
  11. Enterprise Library: Data Access Application Block使用向导,Part 1
  12. 保研夏令营、考研复试个人升学简历模板与制作注意事项
  13. 京瓷打印机m5521cdn_京瓷M5521cdn打印机驱动(京瓷打印机驱动程序)V5.1.2107 最新版...
  14. [DCDC](DC-DC) 电感计算有难题 ? 你我一起来学习
  15. Vue中变量前加...三个点什么意思
  16. Report Services RDL报告服务器的一些经验
  17. 俗理解T检验与F检验的区别
  18. Navicat建数据库时字符集与排序规则说明
  19. codeblock找不到pthread
  20. YOLOv4论文中文翻译

热门文章

  1. LWN:4.9 内核陪伴我们的这六年!
  2. 戴尔服务器系统架构,DELLPowerEdgeServerPortfolio戴尔服务器手册.pdf
  3. 配置IPv4静态路由
  4. 机械师逐空T58笔记本无法开机如何重装系统教学
  5. 高效能程序员的修炼 --读书笔记
  6. Vue3 教程:英雄指南(一)
  7. docker一键部署网址导航+博客+管理系统(强势开源)
  8. F22 猛禽战斗机 攻略
  9. 详解vant组件应用于Vue2
  10. 安装Oracle Enterprise Manager Cloud Control 客户端