• 模考题line


    题目描述(哈哈哈我把题改的面目全非)

    sln和zx是坐标轴上两个有位置的点,她们手拉手连成了一条线。已知坐标,ypq线的一端,她想跳过这条线只有一种跳法,就是跳到自己关于线的对称点上,请问她应该骗rax站在哪里,才能刚好跳到她头上。哈哈哈哈哈哈哈我要笑疯了,rax看到了千万别打我

    输入1 

    0 0 1 1

    1

    1 0

    输出1

    0.000 1.000

    输入2

    0 1 2 5

    2

    1 1

    3 10

    输出2

    -0.600 1.800

    5.400 8.800

    这是正经的题解:我用了相似,然后导呀导呀就导出来了用了

    正解好像用了向量集合?其他人好像用了解析集合·

    大家不要相信下面这些代码,在洛谷至今上只过了一个点......

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    int main()
    {
        freopen("line.in","r",stdin);
        freopen("line.out","w",stdout);
        double ax,ay,bx,by,cx,cy;
        int n;
        scanf("%lf%lf%lf%lf",&ax,&ay,&bx,&by);
        double a = (ay - by) / (bx - ax),b = 0 - ay - a * ax;//求解析式 
        double x = abs(ax - bx),y = abs(ay - by),xie = sqrt(x * x + y * y);    //各边长度比 
        scanf("%d",&n);
        for(int i = 1;i <= n;i++)
        {
            scanf("%lf%lf",&cx,&cy);
            double dx,dy,juli;
            juli = abs(a * cx + cy + b) / sqrt(a * a + 1);//点到直线距离 
            double xx = (0 - b - cy) / a,yy = 0 - b - a * cx;//决定横纵坐标是增大还是减小 
            if(xx > cx){
                dx = cx + 2 * juli * (y / xie);
            }
            else{
                dx = cx - 2 * juli * (y / xie);
            }
            if(yy > cy){
                dy = cy + 2 * juli * (x / xie);
            }
            else{
                dy = cy - 2 * juli * (x / xie);
            }
            printf("%0.3f %0.3f",dx,dy);
        }
        return 0;
    }

    想我考试时竟然没删freopen前的斜杠,然后就爆零了......

  • 相关阅读:
    数据库基础——EXISTS和IN
    C#基础——加密
    C#基础——派生和继承
    SQL Server——报表服务
    SQL Server——SQL Server Profiler
    UML基础——UML简介和历史
    C#基础——密码加密
    C#(ASP.NET)错误: 无法获取属性“0”的值: 对象为 null 或未定义 关键字 'user' 附近有语法错误。
    SQL Server——存储过程
    链表的声明及操作
  • 原文地址:https://www.cnblogs.com/yupeiqi/p/8463322.html
Copyright © 2020-2023  润新知