Eureka (数学组合 + 斜率)
由于斜率的储存精度不够,所以使用最简分数表示记录。
合并同一个位置上的点,然后统计个数,利用公式先求出至少包含2个点的数量。
然后再是求某位之上的点与某一斜率的个数,那就是每边至少一个点的个数相乘。
#include<bits/stdc++.h>
using namespace std; const int maxn = ;
const long long mod = 1e9 + ;
long long powtwo[maxn];
map<pair<int, int>, int>mp; struct node{
int x, y, cnt;
bool operator<(const node &a)const{
if(x == a.x) return y < a.y;
else return x < a.x;
}
}a[maxn]; int main(){
powtwo[] = ;
for(int i = ; i < maxn; i ++) powtwo[i] = powtwo[i - ] * % mod; int T, n;scanf("%d",&T);while(T --){
scanf("%d",&n);
for(int i = ; i < n; i ++)
scanf("%d%d",&a[i].x, &a[i].y);
sort(a, a + n);
int i, j, cnt = ;
for(i = ; i < n;){
for(j = i + ; j < n; j ++)
if((a[i].x != a[j].x) || (a[i].y != a[j].y))
break; a[cnt].x = a[i].x;
a[cnt].y = a[i].y;
a[cnt ++].cnt = j - i;
i = j;
} long long ans = 0LL;
for(i = ; i < cnt; i ++)
ans = (ans + ((a[i].cnt > ) ? powtwo[a[i].cnt] - - a[i].cnt : )) % mod; for(i = ; i < cnt; i ++){
mp.clear();
for(j = i + ; j < cnt; j ++){
int x = a[j].x - a[i].x;
int y = a[j].y - a[i].y;
int gcd = __gcd(x, y);
if(gcd){
x /= gcd; y /= gcd;
}
mp[make_pair(x, y)] += a[j].cnt;
}
for(auto it : mp){
ans += (powtwo[a[i].cnt] - ) * (powtwo[it.second] - );
ans %= mod;
}
}
printf("%lld\n",ans);
}
return ;
}
Eureka (数学组合 + 斜率)的更多相关文章
- [BZOJ5305] [HAOI2018] 苹果树 数学 组合计数
Summary 题意很清楚: 小 \(C\) 在自己家的花园里种了一棵苹果树, 树上每个结点都有恰好两个分支. 经过细心的观察, 小 \(C\) 发现每一天这棵树都会生长出一个新的结点. 第一天的时候 ...
- UVA11538 - Chess Queen(数学组合)
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...
- Codeforces 626D Jerry's Protest 「数学组合」「数学概率」
题意: 一个袋子里装了n个球,每个球都有编号.甲乙二人从每次随机得从袋子里不放回的取出一个球,如果甲取出的球比乙取出的球编号大则甲胜,否则乙胜.保证球的编号xi各不相同.每轮比赛完了之后把取出的两球放 ...
- 数学(组合,容斥):COGS 1220. 盒子与球
1220. 盒子与球 ★ 输入文件:boxball.in 输出文件:boxball.out 简单对比 时间限制:1 s 内存限制:128 MB [问题描述] 现有r个互不相同的盒子和n ...
- HDU 6425 Rikka with Badminton(组合问题签到)题解
题意:问你有多少种选法使得不能满足大于等于2个拍子且大于等于1个球. 思路:数学组合问题,分类讨论一下,刚开始的时候分的很乱,写的乱七八糟的...还有注意MOD,基本上有大数相乘的地方都要先MOD一下 ...
- kaggle数据挖掘竞赛初步--Titanic<随机森林&特征重要性>
完整代码: https://github.com/cindycindyhi/kaggle-Titanic 特征工程系列: Titanic系列之原始数据分析和数据处理 Titanic系列之数据变换 Ti ...
- Spark的Straggler深入学习(2):思考Block和Partition的划分问题——以论文为参考
一.partition的划分问题 如何划分partition对block数据的收集有很大影响.如果需要根据block来加速task的执行,partition应该满足什么条件? 参考思路1:range ...
- spoj 78
数学 组合 隔板法 #include <iostream> #include <cstring> #include <cstdio> #include <s ...
- 可视化n次贝塞尔曲线及过程动画演示--大宝剑
起因 研究css中提供了2次.3次bezier,但是没有对n次bezier实现.对n次的实现有很大兴趣,所以就用js的canvas搞一下,顺便把过程动画模拟了一下. 投入真实生产之中,偏少. n次be ...
随机推荐
- MIPS 指令集开源了
去年年底我们报导过 MIPS 指令集将于今年第一季度开源的消息,现在 MIPS 官方已经正式将其释出. MIPS 是一种精简指令集(Reduced Instruction Set Computer,R ...
- linux之无公网ip的自动登录
场景 对于有公网ip的链接方式我们都比较清楚了,但是有些服务器不允许直接登录或者没有直接登录的公网ip,所以只能通过一个可以直接登录的堡垒机跳转.这时需要你手动去敲ssh远程链接命令(例如:ssh r ...
- BZOJ4391 High Card Low Card [Usaco2015 dec](贪心+线段树/set库
正解:贪心+线段树/set库 解题报告: 算辣直接甩链接qwq 恩这题就贪心?从前往后从后往前各推一次然后找一遍哪个地方最大就欧克了,正确性很容易证明 (这里有个,很妙的想法,就是,从后往前推从前往后 ...
- Linux下安装jdk1.7
Linux下安装jdk1.7 1.进入 /usr/local下创建一个文件夹software,用来存放安装包. [root@192 ~]# cd /usr/local/ 2.创建文件夹 [root@1 ...
- python练习题-day3
1.有变量name="aleX leNb" 1)移除 name 变量对应的值两边的空格,并输出处理结果 print(name.strip()) 2)移除name变量左边的" ...
- 帝国cms如何调用指定id的文章到首页?
小美女用帝国cms建了一个站,现在首页调出指定id为12的文章作为推荐,附带文章摘要,她想用代码的形式直接掉用,以后方便修改.那么,帝国cms如何调用指定id的文章呢?指定信息id,不是调用指定栏目i ...
- JS页面跳转代码怎么写?总结了5种方法
我们在建站时有些链接是固定的,比如客服咨询链接,一般是第三方url,如果直接加上去不太专业,那么就想着用站内的页面做跳转,跳转用js比较多,那么JS页面跳转代码怎么写呢?ytkah在网上搜索了一下,大 ...
- os.path.join路径拼接
#import os print("0:", os.path.join('/aaa', 'bbb', 'ccc.txt')) #0: /aaa\bbb\ccc.txt 多数这种用法 ...
- Linux下搭建redis服务器
1.redis需要gcc的编译环境,在线安装gcc:# yum install gcc-c++ 2.上传redis的压缩包到Linux系统,解压 3.进入源码目录,编译(注意要有makefile), ...
- Java 基础 常用API ( 正则表达式,Date类,DateFormat类,Calendar类 )
正则表达式 正则表达式的概念 正则表达式(英语:Regular Expression,在代码中常简写为regex). 正则表达式是一个字符串,使用单个字符串来描述.用来定义匹配规则,匹配一系列符合某个 ...