BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / acm-icpc / #88972同步于 2016/3/2
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ACM_ICPC机器人发帖

Online Judge 85: 神秘的Bug,求解惑!

liuyaqiu
2016/3/2镜像同步4 回复
先粘贴上我的结题代码。 ------------------------------------------------------- #include <iostream> #include <vector> #include <string> #include <math.h> #include <stdio.h> #include <stdlib.h> using namespace std; bool isLine(double x0, double y0, double x1, double y1, double x2, double y2) { return fabs(x0 * y1 - x1 * y0 + x1 * y2 - x2 * y1 + x2 * y0 - x0 * y2) <= 1e-6; } bool locate(vector<double>& x, vector<double>& y, double val_x, double val_y) { if(x.size() < 2) return false; int n = x.size(); for(int i = 0; i < n - 1; i++) for(int j = i + 1; j < n; j++) { if(isLine(x[i], y[i], x[j], y[j], val_x, val_y)) return true; } return false; } int main() { int t; scanf("%d", &t); vector<string> res; while(t--) { int n; scanf("%d", &n); vector<double> x, y; double val_x, val_y; bool is_line = false; while(n--) { scanf("%lf%lf", &val_x, &val_y); if(locate(x, y, val_x, val_y)) { is_line = true; //break; //非常奇怪的地方再这里,如果不注释掉它,那么就会出现Wrong Answer } x.push_back(val_x); y.push_back(val_y); } if(is_line) res.push_back("Yes"); else res.push_back("No"); } for(int i = 0; i < res.size(); i++) cout<<res[i]<<endl; return 0; } ------------------------------------------------------------------- 第一个函数是判定三个点是否共线,就是高中判定三点共线的公式。 第二个函数是判定已经给定的点列,其中是否存在某点与其中两点是否存在共线关系(暴力双循环法)。 上面注释的那一行break如果不注释掉,就会出错,但是想了很久,也尝试了很久,都无法理解这究竟是怎么回事(表示不是break的锅,尝试过不写break的等价写法,也是出现这种情况)。 求帮忙看看问题是在哪里呢,我的代码应该比较好读吧,不需要太多的注释了。
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
CAPITAL机器人#1 · 2016/3/2
看起来这有多组数据,要是break的话当前这组case的输入就读不完整,会影响下一组的读入。
liuyaqiu机器人#2 · 2016/3/2
但是从完全不能理解是怎么回事儿,显然跳出循环后执行的是对is_line判定,那么直接看上去是跳不跳出都不影响结果,因为is_line是被置为true了。关键是无法的得到OJ的测试数据,所以也无法判定是什么地方引起了错误。 【 在 CAPITAL 的大作中提到: 】 : 看起来这有多组数据,要是break的话当前这组case的输入就读不完整,会影响下一组的读入。
CAPITAL机器人#3 · 2016/3/2
对于单组数据是没有问题的,但是如果是多组数据的话,从第二组开始的读入整个会乱掉(如果第一组还有一些x, y没读的话)。 【 在 liuyaqiu 的大作中提到: 】 : 但是从完全不能理解是怎么回事儿,显然跳出循环后执行的是对is_line判定,那么直接看上去是跳不跳出都不影响结果,因为is_line是被置为true了。关键是无法的得到OJ的测试数据,所以也无法判定是什么地方引起了错误。
YUEYE机器人#4 · 2016/3/3
翁教私信我给个你的邮箱求暑期实习内推。给你发私信说你邮箱已满。 【 在 CAPITAL 的大作中提到: 】 : 对于单组数据是没有问题的,但是如果是多组数据的话,从第二组开始的读入整个会乱掉(如果第一组还有一些x, y没读的话)。 :