NC207032. 不平行的直线
描述
输入描述
第1行: 输入1个正整数:N
第2..N+1行:第i+1行是两个用空格隔开的整数,为点i的坐标(Xi,Yi)
输出描述
输出1个整数,为最多的互不平行的直线数目。
示例1
输入:
3 1 0 -2 0 0 0
输出:
1
C++14(g++5.4) 解法, 执行用时: 8ms, 内存消耗: 1248K, 提交时间: 2020-05-25 19:51:58
#include<bits/stdc++.h> using namespace std; #define ll long long double a[11111][2]; set<double>s; int main(){ ll n,i,j,t,k,x,cnt=0; cin>>n; for(i=0;i<n;i++)cin>>a[i][0]>>a[i][1]; for(j=0;j<n;j++)for(i=j+1;i<n;i++){ double x=a[i][0]-a[j][0],y=a[i][1]-a[j][1]; if(y==0)cnt=1; else s.insert(x/y); } cout<<cnt+s.size(); }
Python3(3.5.2) 解法, 执行用时: 31ms, 内存消耗: 4392K, 提交时间: 2020-10-02 21:40:51
nb = int(input()) arr, line, o_cg = [], set(), 0 for i in range(nb): arr.append([*map(int, input().strip().split())]) for i in range(nb - 1): for j in range(i + 1, nb): if arr[j][0] == arr[i][0]: o_cg = 1 continue k = (arr[j][1] - arr[i][1]) / (arr[j][0] - arr[i][0]) line.add(k) print(len(line) + o_cg)
C++11(clang++ 3.9) 解法, 执行用时: 14ms, 内存消耗: 1612K, 提交时间: 2020-06-11 20:35:07
#include <stdio.h> #include <map> int n, m, i, j, k, a, b, x[205], y[205]; std::map <double, int> f; int main(){ scanf("%d", &n); for(i=1; i<=n; i++){ scanf("%d%d", &x[i], &y[i]); for(j=1; j<i; j++){ a = x[i] - x[j], b = y[i] - y[j]; if(a) f[1.0*b/a] = 1; else k = 1; } } printf("%d\n", k+f.size()); return 0; }