单色三角形(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)两两不互质或者两两互质. 逆向求解,把 ...
随机推荐
- kafka partition(分区)与 group(转)
原文 https://www.cnblogs.com/liuwei6/p/6900686.html 一. 1.原理图 2.原理描述 一个topic 可以配置几个partition,produce发送 ...
- docker入门 什么是docker? 为什么使用docker?
1.什么是docker? 轻量级操作系统虚拟化解决方案 2.为什么使用docker? 1.docker的启动是秒级的,比传统虚拟机快很多 2.资源利用率高,一台主机上可同时运行数千个docker容器 ...
- IDEA2016 maven项目配置Junit
添加插件:File->Settings->Plugins 设置生成模式:File->Settings->Other Settings 修改模板:File->Setting ...
- LSTM/RNN中的Attention机制
一.解决的问题 采用传统编码器-解码器结构的LSTM/RNN模型存在一个问题,不论输入长短都将其编码成一个固定长度的向量表示,这使模型对于长输入序列的学习效果很差(解码效果很差). 注意下图中,ax ...
- Java double 加、减、乘、除
double类型的数值接相加的时候,结果可能出现精度误差为此Java提供了高精度计算的方法:java.math.*里面提供了BigDecimal类 import org.junit.Test; imp ...
- linux 查看任务运行时间
ps -eo pid,tty,user,comm,lstart,etime | grep pid 15590 ? meicai java Wed Sep 26 20:04:31 2018 35-15: ...
- python 一些方法函数
转Python学习笔记十一:列表(3)--列表的一些方法:http://www.cnblogs.com/dabiao/archive/2010/03/12/1683942.html python中的e ...
- leetcode148
class Solution { public: ListNode* sortList(ListNode* head) { multimap<int,ListNode*> mul; whi ...
- Nmap扫描命令使用详解
Nmap扫描基础扫描 当用户对Nmap工具了解后,即可使用该工具实施扫描.通过上一章的介绍,用户可知Nmap工具可以分别对主机.端口.版本.操作系统等实施扫描.但是,在实施这些扫描工作之前,需要先简单 ...
- cdnbest区域里快速配置全部节点的缓存
1.在cdn后台区域中自定义区域配置中添加下面代码,具体参数也可自行调整,代码解释在文档最下面有 <!--#start --> <config> <lang>zh_ ...