传送门
题意:给你一条直线的斜率a和截距b,和某一时刻n个在直线上的点的横坐标,以及沿坐标轴方向的速度。问你这些点在(-∞,+∞)的时间内的碰撞次数。

solution
设两个点在t时刻相碰,有:

x1+vx1t=x2+vx2tx1+vx1t=x2+vx2t
y1+vy1t=y2+vy2ty1+vy1t=y2+vy2t

消去t,可以得到

x1−x2vx2−vx1=y1−y2vy2−vy1x1−x2vx2−vx1=y1−y2vy2−vy1

而在直线上有

y1−y2=a(x1−x2)y1−y2=a(x1−x2)

进一步整理可以得到

vy2−avx2=vy1−avx1vy2−avx2=vy1−avx1

也就是说 当两个点的 vy−avxvy−avx 值相等时,两个点就会相碰
开一个map记录每一个 vy−avxvy−avx 值对应的点的数量
同时也要注意,如果两个点具有相同的vxvx vyvy ,它们的vy−avxvy−avx 也是相同的,但此时两个点相对静止 不会相碰
所以每次统计答案时,除了加上与当前点vy−avxvy−avx 相同的点的数量,还要减去与当前点相对静止的点的数量(可以另开一个map记录一下)

  1. #define IN_LB() freopen("C:\\Users\\acm2018\\Desktop\\in.txt","r",stdin)
  2. #define OUT_LB() freopen("C:\\Users\\acm2018\\Desktop\\out.txt","w",stdout)
  3. #define IN_PC() freopen("C:\\Users\\hz\\Desktop\\in.txt","r",stdin)
  4. #include <bits/stdc++.h>
  5. using namespace std;
  6. typedef long long ll;
  7. typedef pair<ll,ll> pll;
  8. map<ll,int> mp;
  9. map<pll,int> same;
  10. int main() {
  11. // IN_LB();
  12. ll n,a,b,ans=0;
  13. scanf("%lld%lld%lld",&n,&a,&b);
  14. for(int i=0; i<n; i++) {
  15. ll x,vx,vy;
  16. scanf("%lld%lld%lld",&x,&vx,&vy);
  17. ll res = vy-a*vx;
  18. pll node = {vx,vy};
  19. ans+=mp[res] - same[node];
  20. mp[res]++;
  21. same[node]++;
  22. }
  23. printf("%lld\n",ans*2);
  24. return 0;
  25. }

【map离散&容斥】Ghosts @Codeforces Round #478 (Div. 2) D的更多相关文章

  1. 容斥 + 组合数学 ---Codeforces Round #317 A. Lengthening Sticks

    Lengthening Sticks Problem's Link: http://codeforces.com/contest/571/problem/A Mean: 给出a,b,c,l,要求a+x ...

  2. 【推导】Codeforces Round #478 (Div. 2) D. Ghosts

    题意:给你一条直线以及初始时刻这条直线上的一些人的坐标,以及他们的速度矢量.让你对每个人计算他在过去无限远到将来无限远的时间内会与多少人处于同一个点,然后对每个人的这个值求和. 列方程组:两个人i,j ...

  3. Codeforces Round #478 (Div. 2)

    题目链接:http://codeforces.com/contest/975 A. Aramic script time limit per test:1 second memory limit pe ...

  4. Codeforces Round #478 (Div. 2) ABCDE

    A. Aramic script time limit per test 1 second memory limit per test 256 megabytes input standard inp ...

  5. B. Mancala (Codeforces Round #478 (Div. 2))

    #include <bits/stdc++.h> using namespace std; ; typedef long long ll; ll a[maxn]; ll b[maxn]; ...

  6. Codeforces Round #589 (Div. 2)-E. Another Filling the Grid-容斥定理

    Codeforces Round #589 (Div. 2)-E. Another Filling the Grid-容斥定理 [Problem Description] 在\(n\times n\) ...

  7. 贪心+模拟 Codeforces Round #288 (Div. 2) C. Anya and Ghosts

    题目传送门 /* 贪心 + 模拟:首先,如果蜡烛的燃烧时间小于最少需要点燃的蜡烛数一定是-1(蜡烛是1秒点一支), num[g[i]]记录每个鬼访问时已点燃的蜡烛数,若不够,tmp为还需要的蜡烛数, ...

  8. map Codeforces Round #Pi (Div. 2) C. Geometric Progression

    题目传送门 /* 题意:问选出3个数成等比数列有多少种选法 map:c1记录是第二个数或第三个数的选法,c2表示所有数字出现的次数.别人的代码很短,思维巧妙 */ /***************** ...

  9. Codeforces Round #450 (Div. 2)

    Codeforces Round #450 (Div. 2) http://codeforces.com/contest/900 A #include<bits/stdc++.h> usi ...

随机推荐

  1. ynoi2018

    题解: 全分块是啥操作啊.. 而且都好难.. 1.未来日记 这个比较简单 对每个块开个线段树维护权值 $n\sqrt{n}logn$ 这个会炸空间 并不能做... 但还是说一下做法 首先考虑分块 然后 ...

  2. Kudu之Tablet的发现过程

    当创建Kudu客户端时,其会从主服务器上获取tablet位置信息,然后直接与服务于该tablet的服务器进行交谈.为了优化读取和写入路径,客户端将保留该信息的本地缓存,以防止他们在每个请求时需要查询主 ...

  3. Spring AOP中args()、arg-names、argNames

    先小结一下: args()是用来匹配并且接收目标方法的参数的. argNames(用在注解中)与arg-names(用在XML中),他们是同一个东西. argNames用来接收AspectJ表达式中的 ...

  4. js网页下载csv格式的表格

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. Python上下文管理器 with

    对于系统资源的操作,如:文件操作.数据库操作等,我们往往打开文件.连接数据库后忘了将其close掉,这时就可能会引发异常,因此我们常用的做法是: # coding:utf-8 f = open(&qu ...

  6. c#中的委託,匿名方法和lambda表達式

    (原博)http://www.cnblogs.com/niyw/archive/2010/10/07/1845232.html 简介 在.NET中,委托,匿名方法和Lambda表达式很容易发生混淆.我 ...

  7. Linux下的Mysql数据库备份+还原

    数据库备份: root@debian-mm:/home/debian-mm# mysqldump -u root -p Account > Account.sql Enter password: ...

  8. Java 之 JQuery

    1.JQuery a.定义:jQuery 是一个 JavaScript 库 b.作用:极大地简化了 JavaScript 编程 c.引入: <script src="jquery.js ...

  9. 大家的备忘录——xpage_在线引用jQuery

    <xp:this.resources> <xp:dojoModule name="dojo.fx"></xp:dojoModule> <x ...

  10. typescript精简版1:用ts表示常见数据类型

    一:工程准备: 1.全局安装typescript npm i typescript -g // 或 yarn global add typescript vscode 配置 在命令行执行 tsc -- ...