兔子764 2023-04-15 11:36 采纳率: 66.7%
浏览 23
已结题

啊阿斯顿11111cc


```c++
#include<bits/stdc++.h>
using namespace std;
const int N = 205;
int n, m;
struct Point {
    int x, y;
    double det() {
        return sqrt((double)x * x + y * y);
    }
    Point operator+() {

    }
} p[N];
Point operator-() {

}

int main() {
    scanf("%d%d", &n, &m);
    for (int i = 1; i <= n; ++i)
        scanf("%d%d", &p[i].x, &p[i].y);
    for (int i = 1; i <= m; ++i) {
        int op, r, s;
        scanf("%d%d", &op, &r);
        if (op != 1)
            scanf("%d", &s);
        if (op == 1) {
            printf("%.2lf\n", p[r].det());
        } else if (op == 2) {
            Point t = p[r] + p[s];
            printf("%d %d\n", t.x, t.y);
        } else if (op == 3) {
            Point t = p[r] - p[s];
            printf("%d %d\n", t.x, t.y);
        } else if (op == 4) {
            printf("%d\n", dot(p[r], p[s]));
        } else if (op == 5) {
            printf("%d\n", cross(p[r], p[s]));
        } else if (op == 6) {
            printf("%.2lf\n", dis(p[r], p[s]));
        }
    }

    return 0;
}
# 计算几何初探

## 题目描述

本题是代码填空题,按要求补充给出代码的空白即可通过题目。
先输入 $n$$m$,再输入 $n$ 个二维坐标(编号从 $1$ 开始),接着输入 $m$ 个询问,对其中每个询问做出一个回答。
询问包括:
- ` 1 r` 求第 $r$ 个坐标对应的向量的模长(模长公式 $\sqrt{x_r^2+y_r^2}$)。
- ` 2 r s` 求第 $r$ 个坐标对应的向量和第 $s$ 个坐标对应的向量的加法结果(加法公式 $(x_r,y_r)+(x_s,y_s)=(x_r+x_s,y_r+y_s)$)。
- `3 r s` 求第 $r$ 个坐标对应的向量和第 $s$ 个坐标对应的向量的减法结果(减法公式 $(x_r,y_r)-(x_s,y_s)=(x_r-x_s,y_r-y_s)$)。
- `4 r s` 求第 $r$ 个坐标对应的向量和第 $s$ 个坐标对应的向量的点乘结果(点乘公式 $(x_r,y_r) \cdot (x_s,y_s)=x_rx_s+y_r y_s$)。
- `5 r s` 求第 $r$ 个坐标对应的向量和第 $s$ 个坐标对应的向量的叉乘结果(叉乘公式 $(x_r,y_r) \times (x_s,y_s)=x_ry_s-y_rx_s$)。
- `6 r s` 求点 $r$ 和点 $s$ 之间的距离(距离公式 $\sqrt{(x_r-x_s)^2+(y_r-y_s)^2}$)。

## 输入格式

从标准输入读入数据。
第一行输入两个正整数 $n,m$$n,m\le 100$)。
接下来 $n$ 行每行输入两个整数 $x,y$$-1000\le x,y\le 1000$),表示两个坐标。
接下来 $m$ 行每行输入一个询问,格式见题面。

## 输出格式

输出到标准输出。
对于每个询问,回答一行。
如果答案是一个数量,直接输出;如果答案是一个二维向量(或二维坐标),按先 $x$$y$ 的顺序输出该坐标。
对于第 $1$ 类和第 $6$ 类询问输出保留 $2$ 位小数。

## 样例 #1

### 样例输入 #1

3 6
1 1
2 3
3 2
1 2
2 1 2
3 1 2
4 1 2
5 1 2
6 2 3


### 样例输出 #1

3.61
3 4
-1 -2
5
1
1.41


```

  • 写回答

1条回答 默认 最新

  • H3T 2023-04-15 13:15
    关注
    #include<bits/stdc++.h>
    using namespace std;
    const int N = 205;
    
    struct Point {
        int x, y;
        double det() const {
            return sqrt((double)x * x + y * y);
        }
        Point operator+(const Point& other) const {
            return {x + other.x, y + other.y};
        }
        Point operator-(const Point& other) const {
            return {x - other.x, y - other.y};
        }
        int operator*(const Point& other) const {
            return x * other.x + y * other.y;
        }
        int operator^(const Point& other) const {
            return x * other.y - y * other.x;
        }
        double dis(const Point& other) const {
            return sqrt((double)(x - other.x) * (x - other.x) + (y - other.y) * (y - other.y));
        }
    };
    
    int main() {
        int n, m;
        scanf("%d%d", &n, &m);
        Point p[N];
        for (int i = 1; i <= n; ++i)
            scanf("%d%d", &p[i].x, &p[i].y);
        for (int i = 1; i <= m; ++i) {
            int op, r, s;
            scanf("%d%d", &op, &r);
            if (op != 1)
                scanf("%d", &s);
            if (op == 1) {
                printf("%.2lf\n", p[r].det());
            } else if (op == 2) {
                Point t = p[r] + p[s];
                printf("%d %d\n", t.x, t.y);
            } else if (op == 3) {
                Point t = p[r] - p[s];
                printf("%d %d\n", t.x, t.y);
            } else if (op == 4) {
                printf("%d\n", p[r] * p[s]);
            } else if (op == 5) {
                printf("%d\n", p[r] ^ p[s]);
            } else if (op == 6) {
                printf("%.2lf\n", p[r].dis(p[s]));
            }
        }
        return 0;
    }
    

    如果答案对您有所帮助,望采纳。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月15日
  • 已采纳回答 4月15日
  • 创建了问题 4月15日

悬赏问题

  • ¥15 综合布线实例设计,就好看好看不恐怖可好滤镜好聚
  • ¥15 使用moviepy库视频合并时出错
  • ¥30 FLUENT液固传质UDF
  • ¥15 怎么看梯度直方图以,怎么判断梯度消失/爆炸,怎么解决
  • ¥15 aspnetdll文件访问拒绝
  • ¥15 wpf中在模版中寻找元素
  • ¥15 MFC平台生成指定圆
  • ¥15 jmeter出现403
  • ¥500 求华为P30PRO手机硬盘数据恢复
  • ¥15 关于#vscode#的问题:ESP32开发板对接MQTT实现小灯泡的开关