UVALive 5846
来源:互联网 发布:淘宝自定义页面 编辑:程序博客网 时间:2024/06/07 14:40
开始没想到这种方法 很蠢的超时了好几次 最后被学长提醒 才想到原来还可以这么做
首先是题目大意
就是有一个多边形 每个顶点上面有一个灯 每两个灯之间有一条光线 光线有两种颜色 红色和蓝色 分别用0 1表示 输入任意两点之间光线的颜色 问有没有三个点之间的线是同一个颜色
接下来说一下思路 首先题目给的范围是1000个点 数据不大 但是纯纯的暴力枚举肯定会超 所以要变换一个思维进行暴力 既然找三条边颜色一样的很费劲 那就找三条边不全都一样的三角形 再用总的三角形个数减去不符合条件的三角形 就是答案了 首先在输入的时候 记录每个点连出去的边的颜色 一共只有两种颜色 记录起来比较方便 之后走一遍for循环 遍历1000个点 用两种边的个数相乘 这样构成的三角形 一定不是三边同色的 最后一减就是答案了 代码不是很复杂
代码如下
#include<iostream>#include<cstdio>#include<cstring>using namespace std;int an[1010][1010], a[1010], b[1010];int main(){ int t; cin >> t; while(t--){ int n; memset(an, 0, sizeof(an)); memset(a, 0, sizeof(a)); memset(b, 0, sizeof(b)); cin >> n; for(int i = 0; i < n; i++){ for(int j = i+1; j < n; j++){ cin >> an[i][j]; if(an[i][j] == 0){ a[i]++; a[j]++; } else { b[i]++; b[j]++; } } } int ans = 0; for(int i = 0 ; i < n; i++){ ans += a[i]*b[i]; } cout << n*(n-1)*(n-2)/6 - ans/2 <<endl; }}
0 0
- UVALive 5846
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- Leetcode -- Missing Number
- 正则表达式引擎浅析
- 分配内存时如何减少内存碎片(四)
- 笨鸟先飞之Java---缠缠绵绵的注解和注释
- 事务的含义理解
- UVALive 5846
- POJ 1200 Crazy Search(简单哈希)
- 数据库测试点
- UVALive 7066 Intersection 求圆环面积并
- 【编程之美】如何判断单链表里面是否有环?
- Xutils 框架使用(一)之导入sample项目
- Memcached之Window和Linux安装(1)
- C/C++之回调函数
- Spring现有版本和下载地址