蓝桥-ALGO-25-Car的旅行路线
来源:互联网 发布:plc的编程语言主要有 编辑:程序博客网 时间:2024/05/04 10:51
ACM模版
描述
题解
说起蓝桥杯,虽然现在搞得越来越大了,可是一点不走心,官网的 OJ 做得垃圾透了,好好一个题给的样例都是错的,真是扯啊~~~
这个题其实就是一个建图+Floyd,建图比较麻烦一点,其中比较核心的是已知三点求矩形第四点,这个我用的是先求出三角形的直角顶点,然后根据一个公式
WA 了一发,因为我习惯看样例保留了两个小数,而题目要求保留一位……还有,样例输入的第一个 1 是 case 数吗?简直搞笑,还有样例里的 s 竟然是 1?我想吐槽,我也吐了~~~
代码
#include <iostream>#include <cstring>#include <cmath>using namespace std;const int MAXN = 1111;const int MAXS = 111;const int INF = 0x3f3f3f3f;struct city{ int x[4], y[4]; int t;} C[MAXS];int s, t, A, B;double cost[MAXN][MAXN];double lowcost[MAXN][MAXN];double getCost(int x1, int y1, int x2, int y2, int t){ return sqrt(pow(x2 - x1, 2) + pow(y2 - y1, 2)) * t;}void Floyd(int n){ memcpy(lowcost, cost, sizeof(cost)); for (int k = 0; k < n; k++) { for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (lowcost[i][j] > lowcost[i][k] + lowcost[k][j]) { lowcost[i][j] = lowcost[i][k] + lowcost[k][j]; } } } }}void get_fourth_node(int x1, int y1, int x2, int y2, int x3, int y3, int &x4, int &y4){ if ((x1 - x2) * (x3 - x2) + (y1 - y2) * (y3 - y2) == 0) { swap(x1, x2); swap(y1, y2); } else if ((x1 - x3) * (x2 - x3) + (y1 - y3) * (y2 - y3) == 0) { swap(x1, x3); swap(y1, y2); } x4 = x2 + x3 - x1; y4 = y2 + y3 - y1;}int main(int argc, const char * argv[]){ memset(cost, 0x3f, sizeof(cost)); cin >> s >> t >> A >> B; if (A == B) { printf("0.0\n"); return 0; } for (int i = 0; i < s; i++) { cin >> C[i].x[0] >> C[i].y[0]; cin >> C[i].x[1] >> C[i].y[1]; cin >> C[i].x[2] >> C[i].y[2]; cin >> C[i].t; get_fourth_node(C[i].x[0], C[i].y[0], C[i].x[1], C[i].y[1], C[i].x[2], C[i].y[2], C[i].x[3], C[i].y[3]); for (int j = 0; j < 4; j++) { for (int k = j + 1; k < 4; k++) { cost[i * 4 + j][i * 4 + k] = cost[i * 4 + k][i * 4 + j] = getCost(C[i].x[j], C[i].y[j], C[i].x[k], C[i].y[k], C[i].t); } } } for (int i = 0; i < s; i++) { for (int j = i + 1; j < s; j++) { for (int k = 0; k < 4; k++) { for (int l = 0; l < 4; l++) { cost[i * 4 + k][j * 4 + l] = cost[j * 4 + l][i * 4 + k] = getCost(C[i].x[k], C[i].y[k], C[j].x[l], C[j].y[l], t); } } } } Floyd(4 * s); double res = INF; for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { res = min(res, lowcost[A * 4 - 4 + i][B * 4 - 4 + j]); } } printf("%.1f\n", res); return 0;}
阅读全文
0 0
- 蓝桥-ALGO-25-Car的旅行路线
- car的旅行路线
- Car的旅行路线
- Car的旅行路线
- car的旅行路线
- Car的旅行路线
- Codevs1041 Car的旅行路线
- NOIP2001 Car的旅行路线
- 蓝桥-ALGO-15-旅行家的预算
- 【最短路】【NOIP2001】CAR的旅行路线
- wikioi p1041 Car的旅行路线
- 【wikioi】1041 Car的旅行路线
- VIJOS 1119 Car的旅行路线
- wikioi 1041 Car的旅行路线
- car的旅行路线(floyd算法)
- noip2001-4 Car的旅行路线
- 洛谷 P1027 Car的旅行路线
- NOIP 2001 Car的旅行路线
- cassandra cql解析
- 【DP】TEST20170520
- windows 7下搭建PHP开发环境
- <6/2 周五>jQuery中的事件
- Android-发送有序广播
- 蓝桥-ALGO-25-Car的旅行路线
- 【实训】第五周总结上
- 栈应用于进制转换
- java常考笔试题3
- together项目进度报告8
- TCP/IP 理解
- 机器学习+周志华+9.4编程实现K均值算法
- 关于二分法中,斐波那契查找算法对于对半查找法优势的理解
- Android实现横向滑动中间高亮显示