单色三角形模型:空间里有n个点,任意三点不共线。每两个点之间都用红色或者黑色线段链接。如果一个三角形的三条边同色,责成这个三角形是单色三角形。对于给定的红色线段列表,找出单色三角形的个数。

  分析:对于一个顶点,设他连红线的点又x个,那么它脸黑线的点有(n-1-x)个,那么能组成的三角形有x*(n-1-x)个,因为每个点都会遍历,所以得到的结果会重复算,答案应除2。最终结果是C(n, 3) - sum/2。

  

  hdu-5072

  题意,给你n个数,问你有多少对a. b. c 使两两互质,或者两两不互质。

  分析:由上我们可以将互质不互质看成红蓝线,那么处理方式就是一样的了。其实就是组合数学和容斥。

ll pri[maxn],pri_num;
ll mu[maxn];//莫比乌斯函数值
bool vis[maxn]; void mobius() {//筛法求莫比乌斯函数
pri_num = ;//素数个数
memset(vis, false, sizeof(vis));
vis[] = true;
mu[] = ;
for(int i = ; i <maxn; i++){
if(!vis[i]){
pri[pri_num++] = i;
mu[i] = -;
}
for(int j=; j<pri_num && i*pri[j]<maxn ; j++){
vis[i*pri[j]]=true;//标记非素数
if(i%pri[j])mu[i*pri[j]] = -mu[i];
else {
mu[i*pri[j]] = ;
break;
} }
}
}
int a[maxn];
ll num[maxn], have[maxn]; void solve() {
ll n; scanf("%lld", &n);
memset(vis, , sizeof(vis));
memset(a, , sizeof(a));
memset(have, , sizeof(have));
memset(num, , sizeof(num));
int maxx=;
for (int i=; i<n; i++) {
scanf("%d", &a[i]);
vis[a[i]]++;
maxx=max(maxx, a[i]);
}
for (int i=; i<=maxx; i++) {
for (int j=i; j<=maxx; j+=i)
num[i] += vis[j];
for (int j=i; j<=maxx; j+=i) {
have[j] += mu[i]*num[i];
}
}
ll ans=;
for (int i=; i<n; i++) {
if (a[i]!=) {
ans += have[a[i]]*(n--have[a[i]]);
}
}
ans = n*(n-)*(n-)/ - ans/;
printf("%lld\n", ans);
}
int main() {
int t=;
// freopen("in.txt", "r", stdin);
scanf("%d", &t);
mobius();
for (int T=; T<=t; T++) {
// printf("Case %d: ", T);
solve();
}
return ;
}

单色三角形(hdu-5072的更多相关文章

  1. HDU 5072 Coprime (单色三角形+容斥原理)

    题目链接:Coprime pid=5072"> 题面: Coprime Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: ...

  2. hdu 5072 Coprime(同色三角形+容斥)

    pid=5072">http://acm.hdu.edu.cn/showproblem.php?pid=5072 单色三角形模型 现场赛和队友想了3个小时,最后发现想跑偏了.感觉好可惜 ...

  3. Coprime (单色三角形+莫比乌斯反演(数论容斥))

    这道题,先说一下单色三角形吧,推荐一篇noip的论文<国家集训队2003论文集许智磊> 链接:https://wenku.baidu.com/view/e87725c52cc58bd631 ...

  4. LA 5846 霓虹灯广告牌(单色三角形问题)

    https://vjudge.net/problem/UVALive-5846 题意: 圆周上有n个点,两两相连,只能涂红色或蓝色.求单色三角形的个数. 思路: 这个问题在训练指南105页有详细讲解. ...

  5. Hdu 5072 Coprime(容斥+同色三角形)

    原题链接 题意选出三个数,要求两两互质或是两两不互质.求有多少组这样的三个数. 分析 同色三角形n个点 每两个点连一条边(可以为红色或者黑色),求形成的三条边颜色相同的三角形的个数反面考虑这个问题,只 ...

  6. HDU 5072 Coprime 同色三角形问题

    好吧,我承认就算当时再给我五个小时我也做不出来. 首先解释同色三角形问题: 给出n(n >= 3)个点,这些点中的一些被涂上了红色,剩下的被涂上了黑色.然后将这些点两两相连.于是每三个点都会组成 ...

  7. HDU 4503 湫湫系列故事——植树节(单色三角形)

    题目链接 #include <cstdio> using namespace std; int main() { int n,sum,a,t,i; scanf("%d" ...

  8. hdu 5072 Coprime

    http://acm.hdu.edu.cn/showproblem.php?pid=5072 题意:给出 n 个互不相同的数,求满足以下条件的三元无序组的个数:要么两两互质要么两两不互质. 思路:根据 ...

  9. hdu 5072 两两(不)互质个数逆向+容斥

    http://acm.hdu.edu.cn/showproblem.php?pid=5072 求n个不同的数(<=1e5)中有多少组三元组(a, b, c)两两不互质或者两两互质. 逆向求解,把 ...

随机推荐

  1. 如何查看k8s存在etcd中的数据(转)

    原文 https://yq.aliyun.com/articles/561888 一直有这个冲动, 想知道kubernetes往etcd里放了哪些数据,是如何组织的. 能看到,才有把握知道它的实现和细 ...

  2. Oracle中存储图片的类型为BLOB类型,Java中如何将其读取并转为字符串?

    一,读取图片转为String类型: 需要使用Sun公司提供的Base64工具 String str = ((Map) list1.get(0)).get("EINVOICEFILE" ...

  3. win10安装git

    Git官网下载:https://git-scm.com/download 选择win系统,下载.然后选择安装路径,一路next.安装成功后 打开cmd 输入 git --version 配置信息 设置 ...

  4. 引用全局变量global

    lang = Lang.chn def set_lang(lang_type): global lang lang = lang_type

  5. 最简单的cmd命令行取得系统路径和python的安装路径(适用于winxp.win7和win10)

    @echo off::pip install seleniumpython -c"import sys;print(sys.prefix)" >temp.txtfor /f ...

  6. 子页面调整父亲页面的iframe元素

    $('iframe', parent.document).attr('scrolling','no');

  7. JEECG 上传插件升级-Online

    前言: 现有的uploadify上传是基于swf的,随着H5的普及,flash即将退出历史舞台,JEECG本着与时俱进的原则,将全面升级JEECG系统中的上传功能,采用新式上传插件plupload,此 ...

  8. python中面向对象元类的自定义用法

    面向对象中的常用方法 1.instance 和 issubclass instance :判断两个对象是不是一类 issubclass :判断某个类是不是另一个类的子类 #两个常用方法的使用 clas ...

  9. Nginx隐藏标识以及其版本号

    1.隐藏版本号 curl Nginx服务器时,有这么一行Server: nginx,说明我用的是 Nginx 服务器,但并没有具体的版本号.由于某些 Nginx 漏洞只存在于特定的版本,隐藏版本号可以 ...

  10. 双网卡Iptables端口转发

    当前场景如下 跳板机A是双网卡,有一个内网IP和一个公网IP 内网IP: 10.0.10.30 外网IP:  58.68.255.123 内网机器:10.0.30.88,可以和10.0.10.30通讯 ...