Google code jam 2008, Round 1B: A. Crop Triangles 翻译
本文仅作学习之用,题目的测试用例下载及答案的上传请到上面的英文地址,有不专业或者错误还请指正。
麦田三角形
问题
有几个看多了探索频道的恶作剧者想在晚上建一个麦田三角形。他们想建在一个从天上看有等间距格子的巨大麦田里。在田里种了很多树。每一棵树种在两条格子线的交点上(格点)。恶作剧者希望他们做的麦田三角形的定点都在那些书上,同时,为了让他们的三角形更引人注目,他们希望三角形的中心也是在某个格点上。我们提醒一下如果一个三角形的定点为(x1, y1), (x1, y2)和(x3, y3),那么这个三角形的中心的坐标为((x1 + x2 + x3)/3, (y1 + y2 + y3)/3).
有一组坐标为整数的点的集合来表示所有树在网格上的位置。你需要计算出在那个集合里用不同的定点能组成多少个中心在格点上的三角形(也就是说中心的坐标是整数)。
如果三角形的面积为0也被认为是一个有效的三角形。
输入
第一行是测试用例数 N。接下来是N个测试用例。每一个测试用例是含有整数n,A,B,C,D,x0,y0和M并用一个空格分开他们的一行。n是测试用例的树的数目。用数字n,A,B,C,D,x0,y0和M 以及下面的伪代码生成一个测试用例的树的坐标。mod表示取余操作。
参数是挑选出来的,因此测试用例的树不会是重复的。
X = x0, Y = y0
print X Y
for i = 1 to n - 1
X = (A * X + B) mod M
Y = (C * Y + D) mod M
print X, Y
输出
每一个测试用例输出一行包含"Case #X:",X表示第几个测试用例(从1开始)。后面跟着是能够定位在三颗不同的树上并且中心点在格点上的三角形的数目。
约束
1 <= N <= 10
0 <= A, B, C, D, x0, y0 <= 109,
1 <= M <= 109.
小数据集合
3 <= n <= 100.
大数据集合
3 <= n <= 100000.
例子
输入
2
4 10 7 1 2 0 1 20
6 2 0 2 1 1 2 11
输出
Case #1: 1
Case #2: 2