codeforces MemSQL Start[c]UP 2.0 - Round 1 B. 4-point polyline

2024-06-14 03:18

本文主要是介绍codeforces MemSQL Start[c]UP 2.0 - Round 1 B. 4-point polyline,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

其实这是一道很简单的题...

给出(n, m),可以得到一个矩形

让你依次连接矩形内的4个点使它们的长度和最长,而这三条线段可以相交、交叉

遇到这种情况,首先要想到对角线...

出去n==0 m==0的特判可以分4种情况:


这么一来列出4种情况总长度,取最大值对应的即可

代码如下:

#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define MAXN 10010
#define LL long long
using namespace std;int x[MAXN], y[MAXN];int main(void) {int m, n, i;double ans1, ans2, ans3, ans4, ans;while(cin >> n >> m) {if(n == 0) {x[0] = 0; y[0] = 1;x[1] = 0; y[1] = m;x[2] = 0; y[2] = 0;x[3] = 0; y[3] = m-1;} else if(m == 0) {x[0] = 1; y[0] = 0;x[1] = n; y[1] = 0;x[2] = 0; y[2] = 0;x[3] = n-1; y[3] = 0;} else {ans1 = 2.0*sqrt((n-1.0)*(n-1.0)*1.0+m*m*1.0)+sqrt(n*n*1.0+m*m*1.0);ans2 = n*1.0 + 2.0*sqrt(n*n*1.0+m*m*1.0);ans3 = m*1.0 + 2.0*sqrt(n*n*1.0+m*m*1.0);ans4 = 2.0*sqrt(n*n*1.0+(m-1.0)*(m-1.0)*1.0)+sqrt(n*n*1.0+m*m*1.0);cout << ans1 << endl;cout << ans2 << endl;cout << ans3 << endl;cout << ans4 << endl;ans = max(ans1, ans2);ans = max(ans, ans3);ans = max(ans, ans4);if(ans == ans3){x[0] = n; y[0] = m;x[1] = 0; y[1] = 0;x[2] = 0; y[2] = m;x[3] = n; y[3] = 0;} else if(ans == ans2){x[0] = n; y[0] = m;x[1] = 0; y[1] = 0;x[2] = n; y[2] = 0;x[3] = 0; y[3] = m;} else if(ans == ans1){x[0] = n-1; y[0] = 0;x[1] = 0; y[1] = m;x[2] = n; y[2] = 0;x[3] = 1; y[3] = m;} else if(ans == ans4) {x[0] = 0; y[0] = 1;x[1] = n; y[1] = m;x[2] = 0; y[2] = 0;x[3] = n; y[3] = m-1;}}for(i=0; i<4; ++i)printf("%d %d\n", x[i], y[i]);}return 0;
}



这篇关于codeforces MemSQL Start[c]UP 2.0 - Round 1 B. 4-point polyline的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1059220

相关文章

Codeforces Round #240 (Div. 2) E分治算法探究1

Codeforces Round #240 (Div. 2) E  http://codeforces.com/contest/415/problem/E 2^n个数,每次操作将其分成2^q份,对于每一份内部的数进行翻转(逆序),每次操作完后输出操作后新序列的逆序对数。 图一:  划分子问题。 图二: 分而治之,=>  合并 。 图三: 回溯:

Codeforces Round #261 (Div. 2)小记

A  XX注意最后输出满足条件,我也不知道为什么写的这么长。 #define X first#define Y secondvector<pair<int , int> > a ;int can(pair<int , int> c){return -1000 <= c.X && c.X <= 1000&& -1000 <= c.Y && c.Y <= 1000 ;}int m

Codeforces Beta Round #47 C凸包 (最终写法)

题意慢慢看。 typedef long long LL ;int cmp(double x){if(fabs(x) < 1e-8) return 0 ;return x > 0 ? 1 : -1 ;}struct point{double x , y ;point(){}point(double _x , double _y):x(_x) , y(_y){}point op

Codeforces Round #113 (Div. 2) B 判断多边形是否在凸包内

题目点击打开链接 凸多边形A, 多边形B, 判断B是否严格在A内。  注意AB有重点 。  将A,B上的点合在一起求凸包,如果凸包上的点是B的某个点,则B肯定不在A内。 或者说B上的某点在凸包的边上则也说明B不严格在A里面。 这个处理有个巧妙的方法,只需在求凸包的时候, <=  改成< 也就是说凸包一条边上的所有点都重复点都记录在凸包里面了。 另外不能去重点。 int

Codeforces 482B 线段树

求是否存在这样的n个数; m次操作,每次操作就是三个数 l ,r,val          a[l] & a[l+1] &......&a[r] = val 就是区间l---r上的与的值为val 。 也就是意味着区间[L , R] 每个数要执行 | val 操作  最后判断  a[l] & a[l+1] &......&a[r] 是否= val import ja

GNSS CTS GNSS Start and Location Flow of Android15

目录 1. 本文概述2.CTS 测试3.Gnss Flow3.1 Gnss Start Flow3.2 Gnss Location Output Flow 1. 本文概述 本来是为了做Android 14 Gnss CTS 的相关环境的搭建和测试,然后在测试中遇到了一些问题,去寻找CTS源码(/cts/tests/tests/location/src/android/locat

Oracle Start With关键字

Oracle Start With关键字 前言 旨在记录一些Oracle使用中遇到的各种各样的问题. 同时希望能帮到和我遇到同样问题的人. Start With (树查询) 问题描述: 在数据库中, 有一种比较常见得 设计模式, 层级结构 设计模式, 具体到 Oracle table中, 字段特点如下: ID, DSC, PID; 三个字段, 分别表示 当前标识的 ID(主键), DSC 当

笔记整理—内核!启动!—kernel部分(2)从汇编阶段到start_kernel

kernel起始与ENTRY(stext),和uboot一样,都是从汇编阶段开始的,因为对于kernel而言,还没进行栈的维护,所以无法使用c语言。_HEAD定义了后面代码属于段名为.head .text的段。         内核起始部分代码被解压代码调用,前面关于uboot的文章中有提到过(eg:zImage)。uboot启动是无条件的,只要代码的位置对,上电就工作,kern

时间序列|change point detection

change point detection 被称为变点检测,其基本定义是在一个序列或过程中,当某个统计特性(分布类型、分布参数)在某时间点受系统性因素而非偶然因素影响发生变化,我们就称该时间点为变点。变点识别即利用统计量或统计方法或机器学习方法将该变点位置估计出来。 Change Point Detection的类型 online 指连续观察某一随机过程,监测到变点时停止检验,不运用到

OpenGL ES 2.0渲染管线

http://codingnow.cn/opengles/1504.html Opengl es 2.0实现了可编程的图形管线,比起1.x的固定管线要复杂和灵活很多,由两部分规范组成:Opengl es 2.0 API规范和Opengl es着色语言规范。下图是Opengl es 2.0渲染管线,阴影部分是opengl es 2.0的可编程阶段。   1. 顶点着色器(Vert