题目大意:
给我们一张网格图,我们求出所有的路径使得这个路径至少包括四个点,且这四个点是严格递增且相邻两个点的差值为1,并且这条路径如果能走就必须走到不能走为止。
解题思路:
考虑从起点开始走一直走到最后的话,会有dfs和bfs两种想法,但是如果是用bfs的话,统计终点的方案不是很好进行操作,所以采用dfs回溯的方式来解决。我们可以从每一个点开始搜一遍,一直走到终点然后从终点开始往回走,统计这条路径起点处的方案数,这样即使是有多条路径共一个起点的情况,也不会有重复和错漏的情况。
代码:
点击查看代码
题目大意:给一个三角形,和一个端点,要我们在三角形的边上找到另一个点,是的两点所连的线段使这个三角形的面积被平分
解题思路:

移动E点使得S△BDE=12×S△ABC,而且由于三角形高相同,所以他们的面积之比就等于它们的底的比,就可以求出S△ABD和S△BDE之间的比例然后快速求出E的坐标。
代码:
点击查看代码
constexpr double eps = 1E-7;
int sgn(double x){
if(std::fabs(x) < eps) return 0;
return x < 0 ? -1 : 1;
}
struct Point{
double x,y;
Point(){}
Point(double _x,double _y){
x = _x; y = _y;
}
Point operator -(const Point &b)const{
return Point(x-b.x,y-b.y);
}
double operator ^(const Point &b)const{
return x*b.y - y*b.x;
}
double operator *(const Point &b)const{
return x*b.x + y*b.y;
}
};
struct Line{
Point s,e;
Line(){}
Line(Point _s,Point _e){
s = _s; e = _e;
}
bool pointonseg(Point p){
return sgn((p - s) ^ (e - s)) == 0 && sgn((p - s) * (p - e)) <= 0;
}
};
double getS(Point a, Point b, Point c) {
Point vec1 = a-b;
Point vec2 = a-c;
return std::fabs(vec1^vec2)/2;
}
void getans(double S, Point a, Point b, Point c) {
double d = S / getS(a, b, c);
double dx = c.x - b.x, dy = c.y - b.y;
printf("%.7lf %.7lf\n", c.x - (1 - d) * dx, c.y - (1 - d) * dy);
}
void solve() {
Point p[3], pp;
for (int i = 0; i < 3; i++) scanf("%lf%lf", &p[i].x, &p[i].y);
scanf("%lf%lf", &pp.x, &pp.y);
Line L[3];
L[0] = {p[0], p[1]};
L[1] = {p[1], p[2]};
L[2] = {p[0], p[2]};
double res = getS(p[0], p[1], p[2]) / 2;
if (L[0].pointonseg(pp)) {
if (sgn(getS(pp, p[1], p[2]) - res) >= 0) {
getans(res, pp, p[1], p[2]);
} else if (sgn(getS(pp, p[0], p[2]) - res) >= 0) {
getans(res, pp, p[0], p[2]);
} else {
printf("-1\n");
}
} else if (L[1].pointonseg(pp)) {
if (sgn(getS(pp, p[0], p[2]) - res) >= 0) {
getans(res, pp, p[2], p[0]);
} else if (sgn(getS(pp, p[0], p[1]) - res) >= 0) {
getans(res, pp, p[1], p[0]);
} else {
puts("-1");
}
} else if (L[2].pointonseg(pp)) {
if (sgn(getS(pp, p[1], p[2]) - res) >= 0) {
getans(res, pp, p[2], p[1]);
} else if (sgn(getS(pp, p[0], p[1]) - res) >= 0) {
getans(res, pp, p[0], p[1]);
} else {
puts("-1");
}
} else {
puts("-1");
}
}
__EOF__
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现