博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【2019年乐山师范学院程序设计大赛 --- I. 折线】
阅读量:2038 次
发布时间:2019-04-28

本文共 1550 字,大约阅读时间需要 5 分钟。

【2019年乐山师范学院程序设计大赛 --- I. 折线】

题目来源:

Description

在坐标平面上标记了三个点,目的是制作一条没有自相交和自接触的简单折线,以使其通过所有这些点。 同样,折线必须仅由平行于坐标轴的线段组成。 这次的任务是,用最少的线段组成这条折线。

注意:折线指的是多条线段顺次首尾依次相接组成的曲折连线,也可以说折线是把不在一条直线上的几个点,依次用线段连接起来(每个公共端至多有两条线段相连)所构成的图形——摘自百度百科

Input

输入共有三行,每行包含两个整数 x 与 y (-109 ≤ x, y ≤ 109),表示坐标平面上的一个点。每个点都是不同的。

Output

输出一个整数,表示可能的最少的线段数量组成这段折线。

Sample Input

1 1

2 3
3 2

Sample Output

3

解题思路

判断只有1,2条线段的情况,其他情况为3.

  • 1条线段的情况: 有x坐标或者y坐标都相同时,说明都在一条直线上,只需要输出1就行了。
  • 2条线段的情况: 有两个坐标的x(y)值相同并且第三个点的y(x)不在两点y(x)之间即可。

其他情况都为3.

AC代码:

#include 
using namespace std;#define SIS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)#define endl '\n' int main(){
SIS; int arr[3][2]; for(int i=0;i<3;i++) cin >> arr[i][0] >> arr[i][1]; if(arr[1][0]==arr[2][0]&&arr[2][0]==arr[0][0] || arr[1][1]==arr[2][1]&&arr[2][1]==arr[0][1]) {
cout << 1 << endl; return 0; } for(int i=0;i<3;i++) {
for(int j=0;j<3;j++) {
for(int k=0;k<3;k++) {
if(i==j || i==k || j==k) continue; int mxx=max(arr[i][0],arr[j][0]); int mix=min(arr[i][0],arr[j][0]); int mxy=max(arr[i][1],arr[j][1]); int miy=min(arr[i][1],arr[j][1]); if(arr[i][0]==arr[j][0]&&(arr[k][1]<=miy||arr[k][1]>=mxy) || arr[i][1]==arr[j][1]&&(arr[k][0]<=mix||arr[k][0]>=mxx)) {
cout << 2 << endl; return 0; } } } } cout << 3 << endl; return 0;}

转载地址:http://psyof.baihongyu.com/

你可能感兴趣的文章
Gremlin简介
查看>>
TinkerPop中的遍历:图的遍历步骤(1/3)
查看>>
TinkerPop中的遍历:图的遍历步骤(2/3)
查看>>
TinkerPop中的遍历:图的遍历步骤(3/3)
查看>>
列出文件和目录
查看>>
RabbitMQ 相关问题汇总
查看>>
精心收集的 48 个 JavaScript 代码片段,仅需 30 秒就可理解!
查看>>
java 给时间增加几个小时方法
查看>>
状态码维护类
查看>>
vmware 和 本地主机共用同一个文件夹
查看>>
Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数
查看>>
MongoDB写MapReduce程序
查看>>
java导出Excel乱码
查看>>
Windows下tail -f xx.log
查看>>
三张表关联更新字段
查看>>
java 读取 hadoop 的文件 demo
查看>>
java hadoop wordcount
查看>>
maven 将jar和依赖jar打在一起
查看>>
2019考研早知道:专业硕士与学术硕士的11个区别
查看>>
java 生产运算验证码&随机验证码
查看>>