1.合理种植

(plant.pas/.c/.cpp)

【问题描述】

大COS在氯铯石料场干了半年,受尽了劳苦,终于决定辞职。他来到表弟小cos的寒树中学,找到方克顺校长,希望寻个活干。

于是他如愿以偿接到了一个任务……

美丽寒树中学种有许多寒树。方克顺希望校园无论从什么角度看都是满眼寒树,因此他不希望有三棵甚至更多寒树种在一条直线上。现在他把校园里n棵寒树的坐标都给了大COS,让他数出存在多少多树共线情况。(若一条直线上有三棵或以上的树,则算出现一个多树共线情况。)

【输入】

输入文件名为plant.in。

第1行一个正整数n,表示寒树棵数。

接下来n行,每行两个非负整数x、y,表示一颗寒树的坐标。没有两颗寒树在同一位置。

【输出】

输出文件名为plant.out。

输出一个整数,表示存在多少多树共线情况。

【输入输出样例】

plant.in

plant.out

6

0 0

1 1

2 2

3 3

0 1

1 0

1

【数据范围】

对于30%的数据,有n≤10;

对于50%的数据,有n≤100;

对于100%的数据,有n≤1,000,0≤x,y≤10,000。

解题报告

  考试的时候花了整整一个小时在纠结这道题上,结果还是没做出来,可能是因为我考虑的太多,不知道怎么标记判重,它的斜率从+10000~-10000,也不好记,又怕超时,就放弃了。结果这道题就是用斜率解的..(啊,无语=-=)。老师给的标程还没有理解,先记在这里有一笔。

  同学提出了一种更容易理解的方法。先求出两两之间的斜率,但是注意要用long long ki=(y1-y2)*100000000LL/(x1-x2) 记录斜率,这样可以避免小数和double 判重的情况,然后枚举每三个点,如果任意两点之间k 相等,则三点共线。特殊处理:x1=x2的情况,斜率此时不存在,所以把它直接赋值为k=1,对后面的也不影响。那么,问题就到了记录判重的身上了。

 定义一个数组used[1005][1005],如果共线三点中used[i][j]=used[i][k]=used[j][k]=true;  也许你就要问了,你只记录了三个点,如果有第4、5、6...个点都共线,不就不能判断了吗?但是,这样想,我们每次都按顺序枚举,如先开始used[1][2]=used[2][3]=used[1][3]=true了,那第四个点一定有

used[1][2]=used[1][4]=used[2][4]=true,依次类推,因为它们具有传递性,所以,所有这条线上的点都会被标记。这样一来就好办了。

代码如下:

 #include<iostream>
#include<cstdio>
using namespace std;
int n;
struct pp{
int x, y;
};
pp tree[];
bool used[][]={false};
long long ki[][],ans;
int main()
{
freopen("plant.in","r",stdin);
freopen("plant.out","w",stdout);
scanf("%d",&n);
for (int i=;i<=n;i++)
scanf("%d%d",&tree[i].x,&tree[i].y);
for (int i=;i<=n;i++)
for (int j=;j<=n;j++)
if (i!=j)
{
if (tree[i].x!=tree[j].x) ki[i][j]=(tree[i].y-tree[j].y)*100000000LL/(tree[i].x-tree[j].x);
else ki[i][j]=;
}
for (int i=;i<=n-;i++)
for (int j=i+;j<=n-;j++)
for (int t=j+;t<=n;t++)
if (ki[i][j]==ki[j][t])//!!! ==
{
if (used[i][j]||used[i][t]||used[j][t])
used[i][j]=used[i][t]=used[j][t]=true;
else
{
ans++;
used[i][j]=used[i][t]=used[j][t]=true;
}
}
printf("%lld",ans);//long long "%lld"
return ;
}

注意细节

神奇的Noip模拟试题第一试 合理种植 枚举+技巧的更多相关文章

  1. 【数论+技巧】神奇的Noip模拟试题第二试 T1 素数统计

    1.      素数统计 (pcount.pas/.c/.cpp) [问题描述] 小tan的老师揣谙戈给同学们布置了一道题,要求统计给定区间内素数的个数.“这不是很简单吗?”小tan忍不住说.揣谙戈冷 ...

  2. 神奇的Noip模拟试题一试 2 排队

    2 排队 (lineup.pas/.c/.cpp) [问题描述] 小sin所在的班有n名同学,正准备排成一列纵队,但他们不想按身高从矮到高排,那样太单调,太没个性.他们希望恰好有k对同学是高的在前,矮 ...

  3. 神奇的Noip模拟试题 T3 科技节 位运算

    3 科技节 (scifest.pas/.c/.cpp) [问题描述] 一年一度的科技节即将到来.同学们报名各项活动的名单交到了方克顺校长那,结果校长一看皱了眉头:这帮学生热情竟然如此高涨,每个人都报那 ...

  4. 计蒜客 NOIP 提高组模拟竞赛第一试 补记

    计蒜客 NOIP 提高组模拟竞赛第一试 补记 A. 广场车神 题目大意: 一个\(n\times m(n,m\le2000)\)的网格,初始时位于左下角的\((1,1)\)处,终点在右上角的\((n, ...

  5. NOI.AC NOIP模拟赛 第一场 补记

    NOI.AC NOIP模拟赛 第一场 补记 candy 题目大意: 有两个超市,每个超市有\(n(n\le10^5)\)个糖,每个糖\(W\)元.每颗糖有一个愉悦度,其中,第一家商店中的第\(i\)颗 ...

  6. contesthunter暑假NOIP模拟赛第一场题解

    contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...

  7. 9.23 noip模拟试题

      Problem 1 抓牛(catchcow.cpp/c/pas) [题目描述] 农夫约翰被通知,他的一只奶牛逃逸了!所以他决定,马上出发,尽快把那只奶牛抓回来. 他们都站在数轴上.约翰在N(O≤N ...

  8. 9.20 noip模拟试题

      Problem 1 双色球(ball.cpp/c/pas) [题目描述] 机房来了新一届的学弟学妹,邪恶的chenzeyu97发现一位学弟与他同名,于是他当起了善良的学长233 “来来来,学弟,我 ...

  9. 神奇的NOIP模拟赛 T3 LGTB 玩THD

    LGTB 玩THD LGTB 最近在玩一个类似DOTA 的游戏名叫THD有一天他在守一座塔,对面的N 个小兵排成一列从近到远站在塔前面每个小兵有一定的血量hi,杀死后有一定的金钱gi每一秒,他都可以攻 ...

随机推荐

  1. active developer path ("") does not exist

    pod update --verbose --no-repo-update 出现的错误. 解决:在终端中修改你的CommandLine Tools的位置: xcode-select -switch / ...

  2. 【Linux日志】系统日志及分析

    Linux系统拥有非常灵活和强大的日志功能,可以保存几乎所有的操作记录,并可以从中检索出我们需要的信息. 大部分Linux发行版默认的日志守护进程为 syslog,位于 /etc/syslog 或 / ...

  3. 工作流学习——Activiti整体认识二步曲 (zhuan)

    http://blog.csdn.net/zwk626542417/article/details/46594505 ***************************************** ...

  4. Mvc4_@RenderBody()和@RenderSection()

    @RenderBody():呈现子页的主体内容 @RenderSection():呈现特别的节部分. HelperResult RenderSection(string name, bool requ ...

  5. vs2010配置OpenCV2.4.7详细步骤

    vs2010配置opencv2.4.7 需要注意:opencv里x86的vc10对应vs2010版本,vc11对应vs2012版本,vc12对应vs2013及以上版本,若vs2013版本的软件配置时选 ...

  6. PacBio下机数据解读

    今天被人问起如何看懂三代的下机数据,虽然解决了别人的问题,但感觉自己还是没有搞透. 基本的目录结构: |-- HG002new_O1l_BP_P6_021315b_MB_100pM | |-- D01 ...

  7. Sqoop安装配置及数据导入导出

    前置条件 已经成功安装配置Hadoop和Mysql数据库服务器,如果将数据导入或从Hbase导出,还应该已经成功安装配置Hbase. 下载sqoop和Mysql的JDBC驱动 sqoop-1.2.0- ...

  8. 例题:超市买东西的程序。输入商品信息,计算价格,价格满多少元打折。这道题用到结构体,集合,for循环,if else语句

    知识要点: 集合和数组的区别:数组是连续的,同一类型的一块区域,而集合可以是不连续的,多种数据类型的. 集合属性:.count 方法:.Add()  将对象添加到ArrayList中实际包含的元素数 ...

  9. 打开Eclipse时出现"The Eclipse executable launcher was unable to locate its companion shared library"情况的解决办法

    在网上有坑,各种解决方法都有,但似乎我这台64位机器不太给面子,都不能解决: 结果自己找到了解决办法,总结了一下,大多数软件出问题,如果卸载了重新装还是出现问题,一般都是注册表残留的问题: 将ecli ...

  10. clip API实现遮罩

    (function () { var img; var canvas = document.getElementById("canvas"); var con = canvas.g ...