题目链接: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. Scrapy学习-6-JSON数据处理

    使用json模块处理JSON数据 class JsonwithEncodingPipeline(object): def __init__(self): self.file = codecs.open ...

  2. list或map 打印成json 方便调试

    private final Logger logger = Logger.getLogger(this.getClass()); logger.info(JSON.toJSONStringWithDa ...

  3. TCP/IP 协议栈

    TCP(传输控制协议) 传输控制协议(Transmission Control Protocol,TCP)是一种面向连接的.可靠的.基于字节流的传输层通信协议,由IETF的RFC 793定义. 在因特 ...

  4. HDU 4341 Gold miner(分组背包)

    题目链接 Gold miner 目标是要在规定时间内获得的价值总和要尽可能大. 我们先用并查集把斜率相同的物品分在同一个组. 这些组里的物品按照y坐标的大小升序排序. 如果组内的一个物品被选取了,那该 ...

  5. solr 简要笔记

    创建搜索1 创建directory 2.分词器 analyzer 3indexwriter writer dic an 4.document doc.add writer.adddocument(do ...

  6. IntelliJ IDEA配置Tomcat/Jetty运行Web项目

    一.使用Maven的POM引入插件的形式: 这种方式只需在POM中引入Tomcat/Jetty的插件即可运行.参考:http://www.cnblogs.com/EasonJim/p/6687272. ...

  7. 【chrome错误】Cross origin requests are only supported for protocol schemes: http, data,chrome-extension, https, chrome-extension-reso

    使用ajax请求本地文件,chrome会报跨域错误. XMLHttpRequest cannot loadfile:///C:/Users/Li/Desktop/images/alist.json.C ...

  8. SSD S.M.A.R.T

    经过多年HDD硬盘厂商的完善,S.M.A.R.T已经形成了一些标准,但对于SSD来说,大多数S.M.A.R.T都是自定义的,以至于每个厂商所提供的参数并不一致,但大体都会参考HDD S.M.A.R.T ...

  9. 【java】java 中 byte[]、File、InputStream 互相转换

    ========================================================================= 使用过程中,一定要注意close()掉各个读写流!! ...

  10. JNI基础知识

    JNI是在学习Android HAL时必须要面临一个知识点,假设你不了解它的机制,不了解它的使用方式,你会被本地代码绕的晕头转向,JNI作为一个中间语言的翻译官在运行Java代码的Android中有着 ...