using
System;
using
System.Collections.Generic;
class
GFG {
static
int
gcd(
int
p,
int
q)
{
if
(q == 0) {
return
p;
}
int
r = p % q;
return
gcd(q, r);
}
static
int
N = 6;
static
int
maxPointOnSameLine(
int
[, ] points)
{
if
(N < 2)
return
N;
int
maxPoint = 0;
int
curMax, overlapPoints, verticalPoints;
Dictionary<
string
,
int
> slopeMap
=
new
Dictionary<
string
,
int
>();
for
(
int
i = 0; i < N; i++) {
curMax = overlapPoints = verticalPoints = 0;
for
(
int
j = i + 1; j < N; j++) {
if
(points[i, 0] == points[j, 0]
&& points[i, 1] == points[j, 1])
overlapPoints++;
else
if
(points[i, 0] == points[j, 0])
verticalPoints++;
else
{
int
yDif = points[j, 1] - points[i, 1];
int
xDif = points[j, 0] - points[i, 0];
int
g = gcd(xDif, yDif);
yDif /= g;
xDif /= g;
string
pair = Convert.ToString(yDif)
+
" "
+ Convert.ToString(xDif);
if
(!slopeMap.ContainsKey(pair))
slopeMap[pair] = 0;
slopeMap[pair]++;
curMax
= Math.Max(curMax, slopeMap[pair]);
}
curMax = Math.Max(curMax, verticalPoints);
}
maxPoint = Math.Max(maxPoint,
curMax + overlapPoints + 1);
slopeMap.Clear();
}
return
maxPoint;
}
public
static
void
Main(
string
[] args)
{
int
[, ] points = { { -1, 1 }, { 0, 0 }, { 1, 1 },
{ 2, 2 }, { 3, 3 }, { 3, 4 } };
Console.WriteLine(maxPointOnSameLine(points));
}
}