UVALive5846
2024-10-09 06:08:14
题目大意:见刘汝佳《算法竞赛入门经典——训练指南》P173。
解题思路:
如果要直接求所有单色三角形的个数似乎不简单,正难则反,先求出所有非单色三角形 cnt,answer = C(n,3)- cnt。
首先,对于每一个非单色三角形,一定有2个点对应一对异色边,那么我们只需要统计每一个点连接的红边或者蓝边数 t,则这个点连接的异色三角形个数为:t*(n - 1 - t),把各边的异色三角形个数加起来。按照这种方式,对于每一个非单色三角形我们都会从它的2个连接着一对异色边的点计算各一次,所以我们要将得到的异色三角形总数除以二就可以得到正确的 cnt。
AC代码:
#include <cstdio>
#include <cstring>
#include <iostream> using namespace std;
typedef long long ll;
const int maxn=;
bool color[maxn][maxn];
int main()
{
int T,tmp;
int N;
scanf("%d",&T);
while(T--){
ll t1=;
scanf("%d",&N);
for(int i=;i<N;i+=){
for(int j=i+;j<=N;j+=){
scanf("%d",&tmp);
if(tmp) color[i][j]=color[j][i]=true;
else color[i][j]=color[j][i]=false;
}
}
for(int i=;i<=N;i++){
ll on=;
for(int j=;j<=N;j++){
if(i==j) continue;
if(color[i][j]) on++;
}
t1+=(on*(N--on));
}
ll ans=(ll)N*(N-)*(N-)/-t1/;
printf("%lld\n",ans);
}
return ;
}
最新文章
- 2、ASP.NET MVC入门到精通——Entity Framework入门
- history.back新页面跳转
- CSS的重要性
- 智普教育Python培训之Python开发视频教程网络爬虫实战项目
- iOS开发 弹簧效果
- php获取网页内容方法总结
- ubuntu下安装Matlab
- [转载]Python模块学习 ---- subprocess 创建子进程
- java正则表达式Pattern和Matcher
- Kaggle Competition Past Solutions
- 访问权限系列一(public/private/protected/default):成员变量
- c++内存泄漏处理(积累)
- leetcode[164] Maximum Gap
- java.util.HashMap和java.util.HashTable (JDK1.8)
- 【java虚拟机系列】java虚拟机系列之JVM总述
- Arduino IDE for ESP8266 项目云盒子(2)一键自配置+网页服务器
- doubleclick protobuf file load to project
- JAVA框架:hibernate
- Authentication and Authorization in ASP.NET Web API
- 源码分析三(Vector与ArrayList的区别)