题目链接:http://codeforces.com/problemset/problem/452/B

题目意思:给出一个长为n,宽为 m 的矩形,要从这里面(包括边上)找出4个不同的点,使得以某一个点出发,直到四个点都经过后的连线最长。

看到题目中的两个样例,很天真的以为对于一般的n和m(至少有一个不为0),就好像test1那样输出,还特意分四个象限来做呐;而如果 n 或 m 有一个为0,则好像test2 那样处理,于是交了,过不了test3;于是又加多个特判,n == m & n == 1,因为它跟一般的n 和 m 的处理方式是不同的(当然四个象限的值又要再次讨论啦~~)。紧接着,test5过不了,再也不知道怎么侥幸了,只能看别人代码学人思路啦,本来想先看tutorial的,不过好像木有啦~~~几何题!!!

为了不侵犯别人的知识产权,这个代码是这个人的:

7260620 2014-07-27 21:15:06 sevenkplus 452B - 4-point polyline GNU C++ Accepted 15 ms 0 KB

他主要的思路就是暴力!!!枚举16个点中的任意四个,求出最长的距离,保存这四个点的坐标就是答案。

他的操作步骤好厉害,长知识噜^_^ 。尤其是将16个点放在一个嵌有pair 的set里面一个一个枚举(16个点是指,首先是右上角:(n, m),(n, m-1)(n-1, m-1),(n-1, m);右下角:(n, 1), (n, 0), (n-1, 0), (n-1, 1);左下角:(1, 1), (1, 0), (0, 0),(0, 1);左上角:(1, m), (1, m-1), (0, m-1), (0, m))

之所以可以这样做,是因为对于一个矩形来讲,最长的无非就是对角线的长度嘛。16个点就可以覆盖所有情况啦。

 #include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <set>
using namespace std; #define mp make_pair
#define fi first
#define se second
typedef pair<int, int> PII;
typedef set<PII>:: iterator PIIP; set<PII> A;
PII a1, a2, a3, a4;
PIIP i, j, k, l; int n, m; void addnode(int x, int y)
{
if (x >= && x <= n && y >= && y <= m)
A.insert(mp(x, y));
} double dist(PII x, PII y)
{
return sqrt((x.fi-y.fi)*(x.fi-y.fi) + (x.se-y.se)*(x.se-y.se));
} int main()
{
while (scanf("%d%d", &n, &m) != EOF)
{
A.clear();
// 右上角
addnode(n, m);
addnode(n, m-);
addnode(n-, m-);
addnode(n-, m);
// 右下角
addnode(n, );
addnode(n, );
addnode(n-, );
addnode(n-, );
// 左下角
addnode(, );
addnode(, );
addnode(, );
addnode(, );
// 左上角
addnode(, m);
addnode(, m-);
addnode(, m-);
addnode(, m); double tmp = -;
for (i = A.begin(); i != A.end(); i++)
{
for (j = A.begin(); j != A.end(); j++)
{
for (k = A.begin(); k != A.end(); k++)
{
for (l = A.begin(); l != A.end(); l++)
{
if (i == j || i == k || i == l || j == k || j == l || k == l)
continue;
double t = dist(*i, *j) + dist(*j, *k) + dist(*k, *l);
if (t > tmp)
{
tmp = t;
a1 = *i;
a2 = *j;
a3 = *k;
a4 = *l;
}
}
}
}
}
printf("%d %d\n", a1.fi, a1.se);
printf("%d %d\n", a2.fi, a2.se);
printf("%d %d\n", a3.fi, a3.se);
printf("%d %d\n", a4.fi, a4.se);
}
return ;
}

(这个是我昨晚看完今日默写的,虽然最后还是有点点瑕疵需要看回他的来修改,不过好开心学到这么厉害的写法)

codeforces B. 4-point polyline 解题报告的更多相关文章

  1. Codeforces Educational Round 92 赛后解题报告(A-G)

    Codeforces Educational Round 92 赛后解题报告 惨 huayucaiji 惨 A. LCM Problem 赛前:A题嘛,总归简单的咯 赛后:A题这种**题居然想了20m ...

  2. codeforces 476C.Dreamoon and Sums 解题报告

    题目链接:http://codeforces.com/problemset/problem/476/C 题目意思:给出两个数:a 和 b,要求算出 (x/b) / (x%b) == k,其中 k 的取 ...

  3. Codeforces Round #382 (Div. 2) 解题报告

    CF一如既往在深夜举行,我也一如既往在周三上午的C++课上进行了virtual participation.这次div2的题目除了E题都水的一塌糊涂,参赛时的E题最后也没有几个参赛者AC,排名又成为了 ...

  4. codeforces 507B. Amr and Pins 解题报告

    题目链接:http://codeforces.com/problemset/problem/507/B 题目意思:给出圆的半径,以及圆心坐标和最终圆心要到达的坐标位置.问最少步数是多少.移动见下图.( ...

  5. codeforces 500B.New Year Permutation 解题报告

    题目链接:http://codeforces.com/problemset/problem/500/B 题目意思:给出一个含有 n 个数的排列:p1, p2, ..., pn-1, pn.紧接着是一个 ...

  6. codeforces B. Xenia and Ringroad 解题报告

    题目链接:http://codeforces.com/problemset/problem/339/B 题目理解不难,这句是解题的关键 In order to complete the i-th ta ...

  7. codeforces 462C Appleman and Toastman 解题报告

    题目链接:http://codeforces.com/problemset/problem/461/A 题目意思:给出一群由 n 个数组成的集合你,依次循环执行两种操作: (1)每次Toastman得 ...

  8. codeforces 460A Vasya and Socks 解题报告

    题目链接:http://codeforces.com/problemset/problem/460/A 题目意思:有一个人有 n 对袜子,每天早上会穿一对,然后当天的晚上就会扔掉,不过他会在 m 的倍 ...

  9. codeforces 567D.One-Dimensional Battle Ships 解题报告

    题目链接:http://codeforces.com/problemset/problem/567/D 题目意思:给出 1 * n 的 field,编号从左至右依次为 1,2,...,n.问射 m 枪 ...

随机推荐

  1. pyquery操作

    pyquery和我们之前用的jQuery有着异曲同工之处,使用起来更加方便,基本能满足大部分时候我们的需求. 先引入一个小事例展示pyquery的操作: html = ''' <div> ...

  2. CentOS 7.5 初始网络配置

    最近刚装完 CentOS 7.5 系统,由于网络不通,导致无法用 yum 命令下载软件,经过了各种折腾,终于搞定了,这里讲解一下 如何设置初始网络. 本案例环境  VmWare 11.0 , 操作系统 ...

  3. Unity3D 对象池思想 在游戏开发中的运用

    分类:U3D 1.在王者荣耀中,每30秒小兵会出现一波,出现之后会被敌方玩家或敌方小兵销毁,一局游戏下来,小兵会被创建多次,同时也会被销毁,在游戏中,这种频繁的创建和销毁游戏对象是很损耗性能的.在游戏 ...

  4. Android-事件体系全面总结+实践分析

    事件分发在Android中是很重要的基础知识,网上相关的文章也很多,但是花了很多精力看了很多别人的分析总结,最终的感觉还是似懂非懂,所以决定自己动手研究一下,去发现其中的规律.本文顺着我自己的思路去研 ...

  5. 50 个 Bootstrap 插件

    Bootstrap是快速开发Web应用程序的前端工具包.它是一个CSS和HTML的集合,它使用了最新的浏览器技术,给你的Web开发提供了时尚的版式,表单,buttons,表格,网格系统等等. 本文向你 ...

  6. PHP中extract()函数的妙用

    看cakephp 2.3.8的源代码,很多地方都用 到 compact('name', 'response'); extract($status, EXTR_OVERWRITE); 这样的代码.com ...

  7. SQL存储过程实例详解

    本文用3个题目,从建立数据库到创建存储过程,详细讲解数据库的功能. 题目1         学校图书馆借书信息管理系统建立三个表:         学生信息表:student 字段名称 数据类型 说明 ...

  8. CF 558B(Amr and The Large Array-计数)

    B. Amr and The Large Array time limit per test 1 second memory limit per test 256 megabytes input st ...

  9. Seven times have I despised my soul 《我曾七次鄙视自己的灵魂》

    <我曾七次鄙视自己的灵魂>,纪伯以“自己的灵魂”为名,看穿人性所共有弱点的一首诗.诗句简单有力发人深省,督促人们拥有更高的精神境界,呼吁人们涤荡自己的灵魂,唾弃丑恶,追求高尚. Seven ...

  10. 电脑技巧 ADSL如何远程盗号

    ADSL如何远程盗号 开头语: 本文中揭露了黑客攻击ADSL用户,窃取用户名密码的常见方法,读者请勿将其用于不法用途,并提醒所有与此漏洞相关的用户尽快采取措施进行防范. ADSL作为一种宽带接入方式已 ...