好吧,我承认就算当时再给我五个小时我也做不出来。

首先解释同色三角形问题:

给出n(n >= 3)个点,这些点中的一些被涂上了红色,剩下的被涂上了黑色。然后将这些点两两相连。于是每三个点都会组成一个三角形,

即总共同拥有sum = C(3,n)个三角形。

对于一个三角形,假设三个点颜色一样则称其为同色三角形。

那么一个非常直观的思路就是容斥,sum - 非同色三角形个数ans。

ans = (sigma (Xi*Yi) ) / 2;(1 <= i <= n,Xi,Yi分别表示与第 i 个点相连的红色点和黑色点的个数。

)

状态不好的时候,代码写的就像屎一样。

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <queue>
#include <cmath>
#include <stack>
#include <map> #pragma comment(linker, "/STACK:1024000000")
#define EPS (1e-8)
#define LL long long
#define ULL unsigned long long
#define INF 0x3f3f3f3f using namespace std; int divi[100010][130]; bool is[100010]; int num[100010]; int mem[100010]; int ch[1001]; int Check(int x)
{
int ans = 0;
while(x)
ans += (x&1),x >>= 1;
return ans&1 ? 1:-1;
} int main()
{
int n = 100000,i,j,k; for(i = 0;i <= 1000; ++i)
ch[i] = Check(i); for(i = 1;i <= n; ++i)
divi[i][0] = 0; memset(is,false,sizeof(is)); for(i = 2;i <= n; ++i)
{
if(is[i] == false)
{
divi[i][++divi[i][0]] = i; for(j = i+i;j <= n; j += i)
{
divi[j][++divi[j][0]] = i;
is[j] = true;
}
}
} int Max,Mul,t;
int wf;
for(i = 1;i <= n; ++i)
{
Max = (1<<divi[i][0]) - 1;
wf = divi[i][0];
for(j = 1;j <= Max; ++j)
{
for(Mul = 1,t = 1,k = wf;k >= 1; --k,t <<= 1)
{
if((j&t) && j != t)
Mul *= divi[i][k];
}
if(Mul != 1)
divi[i][++divi[i][0]] = Mul*ch[j];
}
} int T,tmp;
LL ans,sum; int Top; scanf("%d",&T); while(T--)
{
scanf("%d",&n); memset(is,false,sizeof(is)); for(i = 1,Top = 0;i <= n; ++i)
{
scanf("%d",&num[i]);
is[num[i]] = true;
Top = max(Top,num[i]);
} ans = 0; memset(mem,-1,sizeof(mem));
LL anw = 0;
for(i = 1;i <= n; ++i)
{
tmp = num[i];
ans = 0;
for(j = divi[tmp][0];j >= 1; --j)
{
if(mem[abs(divi[tmp][j])] != -1)
sum = mem[abs(divi[tmp][j])]*(divi[tmp][j]/abs(divi[tmp][j]));
else
{
sum = 0;
for(k = abs(divi[tmp][j]);k <= Top; k += abs(divi[tmp][j]))
sum += is[k] ? 1 : 0;
mem[abs(divi[tmp][j])] = sum;
sum *= (divi[tmp][j]/abs(divi[tmp][j]));
}
ans += sum;
}
if(ans)
anw += (n-ans)*(ans-1);
}
LL tn = n;
printf("%I64d\n",tn*(tn-1)*(tn-2)/6 -anw/2);
} return 0;
}

HDU 5072 Coprime 同色三角形问题的更多相关文章

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

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

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

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

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

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

  4. hdu 5072 Coprime

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

  5. hdu 5072 Coprime 容斥原理

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Submissio ...

  6. hdu 5072 Coprime (容斥)

    Problem Description There are n people standing in a line. Each of them has a unique id number. Now ...

  7. ACM学习历程—HDU 5072 Coprime(容斥原理)

    Description There are n people standing in a line. Each of them has a unique id number. Now the Ragn ...

  8. hdu5072(鞍山regional problem C):容斥,同色三角形模型

    现场过的第四多的题..当时没什么想法,回来学了下容斥,又听学长讲了一讲,终于把它过了 题目大意:给定n个数,求全部互质或者全部不互质的三元组的个数 先说一下同色三角形模型 n个点 每两个点连一条边(可 ...

  9. [容斥原理] hdu 4135 Co-prime

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4135 Co-prime Time Limit: 2000/1000 MS (Java/Others) ...

随机推荐

  1. gulp几个常见问题及解决方案

    1. 找不到local gulp 报错代码: $ gulp [23:29:31] Local gulp not found in [23:29:31] Try running: npm install ...

  2. jsp 用shiro 的判断 是否有菜单查看的权限

    实例:spring-shiro.xml 123 /admin/repairType/index = roles["ROLE_ADMIN"]/admin/user=roles[&qu ...

  3. android studio执行 Information:Gradle tasks [:app:assembleDebug]失败处理

    Error:Execution failed for task ‘:app:mergeDebugResources’. > Some file crunching failed, see log ...

  4. JSP语法基础(一)

    一.JSP页面中的凝视 (1)HTML凝视 <!-- comment [ <%=expression %> ] --> 能在client显示的一种凝视,标记内的全部JSP脚本元 ...

  5. java中volatile关键字的含义--volatile并不能做到线程安全

    在Java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉. Java语言是支持多线程的,为了解决线程并发的问题,在语 ...

  6. [Angular] New async 'as' syntax and ngIf.. else

    From Anuglar v4 above, we are able to using 'as' with async pipe. This allow as using 'new variable' ...

  7. maven 怎么在MyEclipse中打开Navigator视图

    方法一:1.点击菜单window2.选择show view菜单项3.选择other菜单项4.点击general,在其中可以找到 方法二:1.点击菜单window2.选择show view菜单项3.选择 ...

  8. Nginx 虚拟主机及正向代理设置

    添加虚拟主机 # vim /usr/local/nginx-1.9.0/conf/vhost/proxy.conf  server { resolver 8.8.8.8; listen ; locat ...

  9. MySQL5.7 四种日志文件

    mysql 日志包括:错误日志,二进制日志,通用查询日志,慢日志等 一:通用查询日志: 记录建立的客户端连接和执行的语句 1)show variables like '%verision%'; 显示数 ...

  10. [Angular] Configurable NgModules

    You probably have seen 'foorRoot()' method a lot inside Angular application. Creating a configurable ...