P1715 [USACO16DEC]Lots of Triangles好多三角形

题目描述

农民约翰希望通过卖出他拥有的一部分土地来增加收入。他在这片土地上种了\(N\)棵树(\(3\le N\le 300\)),每棵树都可以用一个二维网格图上的一个坐标来表示,没有三棵树是共线的。约翰想以3棵树做顶点围成三角形来分割地,以确定地的大小和形状,基于约翰所有树可能组成的三树组合,当然有\(L=\binom{N}{3}\)种可能考虑分割贩卖的土地切块。

一块分出的三角形土地有价值\(v\),\(v\)的大小决定于土地上树的数量,树的数量=土地价值=\(v\)(顶点上的树不算,网格图边界不种树)。当\(v=0,1...N-3\)时,请帮约翰求出有多少三角形地\(L\)拥有价值\(v\)。

输入输出格式

输入格式:

输入的第一行为树的棵数\(N\)。

接下来的\(N\)行分别为不同树在二维网格图上的坐标;它们都是介于0和1000000之间的的整数;行和列数间用空格隔开。

输出格式:

输出\(N-2\)行,其中第\(i\)行是价值\(v\)等于\(i-1\)的土地块数量。


听说这个题普及组做的会比NOI的选手快

发现\(C_n^3\)可枚举,考虑枚举每一个三元组然后\(O(1)\)查询。

我们可以预处理出每条线段下端的点的个数,然后查询的时候容斥原理就行了

注意细节。


Code:

  1. #include <cstdio>
  2. #include <algorithm>
  3. using namespace std;
  4. const int N=302;
  5. pair <double,double > dx[N];
  6. int n,ans[N],cnt[N][N],f[N];
  7. bool check(int i,int j,int id)
  8. {
  9. if((dx[id].second-dx[i].second)*(dx[j].first-dx[id].first)<(dx[j].second-dx[id].second)*(dx[id].first-dx[i].first))
  10. return true;
  11. return false;
  12. }
  13. int main()
  14. {
  15. scanf("%d",&n);
  16. for(int i=1;i<=n;i++)
  17. scanf("%lf%lf",&dx[i].first,&dx[i].second);
  18. sort(dx+1,dx+1+n);
  19. for(int i=1;i<=n;i++)
  20. for(int j=i+1;j<=n;j++)
  21. {
  22. for(int l=i+1;l<=n;l++)
  23. if(dx[l].first>dx[i].first&&dx[l].first<dx[j].first&&check(i,j,l))
  24. cnt[i][j]++;
  25. }
  26. for(int i=1;i<=n;i++)
  27. if(dx[i].first==dx[i-1].first)
  28. f[i]=f[i-1]+(dx[i].second==dx[i-1].second?0:1);
  29. for(int i=1;i<=n;i++)
  30. for(int j=i+1;j<=n;j++)
  31. for(int l=j+1;l<=n;l++)
  32. {
  33. if(check(i,l,j))//在下面
  34. {
  35. if(dx[i].first==dx[j].first||dx[l].first==dx[j].first)
  36. ans[cnt[i][l]-cnt[i][j]-cnt[j][l]]++;
  37. else
  38. ans[cnt[i][l]-cnt[i][j]-cnt[j][l]-1-f[j]]++;
  39. }
  40. else
  41. {
  42. if(dx[i].first==dx[j].first||dx[l].first==dx[j].first)
  43. ans[cnt[i][j]+cnt[j][l]-cnt[i][l]]++;
  44. else
  45. ans[cnt[i][j]+f[j]+cnt[j][l]-cnt[i][l]]++;
  46. }
  47. }
  48. for(int i=0;i<=n-3;i++)
  49. printf("%d\n",ans[i]);
  50. return 0;
  51. }

2018.7.19

洛谷 P1715 [USACO16DEC]Lots of Triangles好多三角形 解题报告的更多相关文章

  1. 洛谷 P1291 [SHOI2002]百事世界杯之旅 解题报告

    P1291 [SHOI2002]百事世界杯之旅 题目描述 "--在2002年6月之前购买的百事任何饮料的瓶盖上都会有一个百事球星的名字.只要凑齐所有百事球星的名字,就可参加百事世界杯之旅的抽 ...

  2. 洛谷 P4714 「数学」约数个数和 解题报告

    P4714 「数学」约数个数和 题意(假):每个数向自己的约数连边,给出\(n,k(\le 10^{18})\),询问\(n\)的约数形成的图中以\(n\)为起点长为\(k\)的链有多少条(注意每个点 ...

  3. 洛谷 P4345 [SHOI2015]超能粒子炮·改 解题报告

    P4345 [SHOI2015]超能粒子炮·改 题意 求\(\sum_{i=0}^k\binom{n}{i}\),\(T\)组数据 范围 \(T\le 10^5,n,j\le 10^{18}\) 设\ ...

  4. 洛谷 P1691 有重复元素的排列问题 解题报告

    P1691 有重复元素的排列问题 题目描述 设\(R={r_1,r_2,--,r_n}\)是要进行排列的\(n\)个元素.其中元素\(r_1,r_2,--,r_n\)可能相同.使设计一个算法,列出\( ...

  5. 洛谷 P2746 [USACO5.3]校园网Network of Schools 解题报告

    P2746 [USACO5.3]校园网Network of Schools 题目描述 一些学校连入一个电脑网络.那些学校已订立了协议:每个学校都会给其它的一些学校分发软件(称作"接受学校&q ...

  6. 洛谷 P1121 环状最大两段子段和 解题报告

    P1121 环状最大两段子段和 题目描述 给出一段环状序列,即认为\(A_1\)和\(A_N\)是相邻的,选出其中连续不重叠且非空的两段使得这两段和最大. 输入输出格式 输入格式: 第一行是一个正整数 ...

  7. 洛谷 P1120 小木棍 [数据加强版]解题报告

    P1120 小木棍 [数据加强版] 题目描述 乔治有一些同样长的小木棍,他把这些木棍随意砍成几段,直到每段的长都不超过50. 现在,他想把小木棍拼接成原来的样子,但是却忘记了自己开始时有多少根木棍和它 ...

  8. 洛谷 P2336 [SCOI2012]喵星球上的点名 解题报告

    P2336 [SCOI2012]喵星球上的点名 题目描述 a180285 幸运地被选做了地球到喵星球的留学生.他发现喵星人在上课前的点名现象非常有趣. 假设课堂上有 \(N\) 个喵星人,每个喵星人的 ...

  9. 洛谷 P2862 [USACO06JAN]把牛Corral the Cows 解题报告

    P2862 [USACO06JAN]把牛Corral the Cows 题目描述 Farmer John wishes to build a corral for his cows. Being fi ...

随机推荐

  1. javaweb(十九)——JSP标签

    一.JSP标签介绍 JSP标签也称之为Jsp Action(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jsp页面难以维护. 二.JSP常用标签 ...

  2. textbox的验证

    代码如下: textBox1.KeyDown += (a, b) => { if (b.KeyCode == Keys.Enter) { textBox2.Focus(); } }; textB ...

  3. Python不生成HTMLTestRunner报告-转载学习

    1.问题:Python中同一个.py文件中同时用unittest框架和HtmlReport框架后,HtmlReport不被执行. 2.为什么?其实不是HtmlReport不被执行,也不是HtmlRep ...

  4. webpack整体配置结构

    摘自<深入浅出webpack>2.8 const path = require('path'); module.exports = { // entry 表示入口,webpack执行的第一 ...

  5. Oracle创建表管理表

    --创建图书表 create table books_lib ( book_id ) primary key, --unique&not null book_name ) not null ) ...

  6. Bellman-ford 模板

    #include<bits/stdc++.h> const int inf=0x3f3f3f3f; ; struct edge{ int u,v;//两个点 int w; //权值 Edg ...

  7. Paper Reading - Convolutional Sequence to Sequence Learning ( CoRR 2017 ) ★

    Link of the Paper: https://arxiv.org/abs/1705.03122 Motivation: Compared to recurrent layers, convol ...

  8. mongoDB操作2

    一.find操作 MongoDB中使用find来进行查询,通过指定find的第一个参数可以实现全部和部分查询. 1.查询全部 空的查询文档{}会匹配集合的全部内容.如果不指定查询文档,默认就是{}. ...

  9. 使用Node.js 搭建http服务器 http-server 模块

    1. 安装 http-server 模块 npm install http-server -g   全局安装 2.在需要的文件夹   启动 http-server  默认的端口是8080    可以使 ...

  10. 20135208 JAVA第四次实验

    课程:Java程序与设计     班级:1352 姓名:贺邦 小组成员: 20135212池彬宁 20135208贺邦 学号:20135208 成绩:             指导教师:娄嘉鹏     ...