模考题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前的斜杠,然后就爆零了......

原文地址:https://www.cnblogs.com/yupeiqi/p/8463322.html