单色三角形(hdu-5072
单色三角形模型:空间里有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的更多相关文章
- HDU 5072 Coprime (单色三角形+容斥原理)
题目链接:Coprime pid=5072"> 题面: Coprime Time Limit: 2000/1000 MS (Java/Others) Memory Limit: ...
- hdu 5072 Coprime(同色三角形+容斥)
pid=5072">http://acm.hdu.edu.cn/showproblem.php?pid=5072 单色三角形模型 现场赛和队友想了3个小时,最后发现想跑偏了.感觉好可惜 ...
- Coprime (单色三角形+莫比乌斯反演(数论容斥))
这道题,先说一下单色三角形吧,推荐一篇noip的论文<国家集训队2003论文集许智磊> 链接:https://wenku.baidu.com/view/e87725c52cc58bd631 ...
- LA 5846 霓虹灯广告牌(单色三角形问题)
https://vjudge.net/problem/UVALive-5846 题意: 圆周上有n个点,两两相连,只能涂红色或蓝色.求单色三角形的个数. 思路: 这个问题在训练指南105页有详细讲解. ...
- Hdu 5072 Coprime(容斥+同色三角形)
原题链接 题意选出三个数,要求两两互质或是两两不互质.求有多少组这样的三个数. 分析 同色三角形n个点 每两个点连一条边(可以为红色或者黑色),求形成的三条边颜色相同的三角形的个数反面考虑这个问题,只 ...
- HDU 5072 Coprime 同色三角形问题
好吧,我承认就算当时再给我五个小时我也做不出来. 首先解释同色三角形问题: 给出n(n >= 3)个点,这些点中的一些被涂上了红色,剩下的被涂上了黑色.然后将这些点两两相连.于是每三个点都会组成 ...
- HDU 4503 湫湫系列故事——植树节(单色三角形)
题目链接 #include <cstdio> using namespace std; int main() { int n,sum,a,t,i; scanf("%d" ...
- hdu 5072 Coprime
http://acm.hdu.edu.cn/showproblem.php?pid=5072 题意:给出 n 个互不相同的数,求满足以下条件的三元无序组的个数:要么两两互质要么两两不互质. 思路:根据 ...
- hdu 5072 两两(不)互质个数逆向+容斥
http://acm.hdu.edu.cn/showproblem.php?pid=5072 求n个不同的数(<=1e5)中有多少组三元组(a, b, c)两两不互质或者两两互质. 逆向求解,把 ...
随机推荐
- Docker系列07:Docker-compose
1 什么是Docker-Compose Compose项目来源于之前的fig项目,使用python语言编写,与docker/swarm配合度很高. Compose 是 Docker 容器进行编排的工 ...
- cookie与session的区别是什么
cookie与session的区别有:cookie以文本格式存储在浏览器上,存储量有限:而会话存储在服务端,可以无限量存储多个变量并且比cookie更安全 在php中可以指定站点的访问者信息存储在se ...
- JDK1.7 ConcurrentHashMap--解决高并发下的HashMap使用问题
高并发下也可以使用HashTable .Collections.synchronizedMap因为他们是线程安全的,但是却牺牲了性能,无论是读操作.写操作都是给整个集合加锁,导致同一时间内其他操作均为 ...
- leetcode1031
class Solution(object): def getMaxByCount(self,A,maxlen): curmax = 0 curmax = sum(A[:maxlen]) bigmax ...
- oracle instantclient + plsql 远程连接数据库
PLSQL Developer连接数据库: 1.不连接数据库登陆PLSQL Developer(登陆界面按“取消”即可).在Tools->Perferences->Connection ...
- jquery 返回浏览器顶部
经常在网页中看到有这样的现象,点击一个按钮,然后页面会跳到页面的中指定的位置,那这种效果是怎么实现的呢? 很多网页都有这种效果:返回顶部或者跳到不同的楼层(以下是天猫的效果) 实现原理: 1.我们来看 ...
- LeetCode OJ 117. Populating Next Right Pointers in Each Node II
题目 Given a binary tree struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode * ...
- springmvc转页面
@RequestMapping("/aa") public String zuan(){ return "redirect:/bb.jsp"; } 如果没有带r ...
- xadmin 常见错误
版本: Django==2.0.5 xadmin==0.6.1 djangorestframework==3.9.0 1.No module named 'django.core.urlresolve ...
- electron-vue 淘宝源
yarn-js config set registry https://registry.npm.taobao.org