题目

Link

输出序列中有多少个组合 {a1,a2,a3,a4,a5,a6}可以构成一个六边形。

分析

序列每个数都不相等。

所以可以设 a1<a2<a3<a4<a5<a6。

把六边形分解为 4 个三角形, 又可以得出

a1+a2+a3+a4+a5>a6:

a1+a2+a3>a6−a5−a4。

在 a4 固定的情况下, a3可以取[a3,a4)之间

所以我们枚举 , 用树状数组维护。

Code

#include <bits/stdc++.h>

using namespace std;
const int maxn = 5000000 + 131;
int C[maxn]; int lowbit(int x) {
return x &(-x);
} int Sum(int x) {
int ret = 0;
while(x) {
ret += C[x];
x -= lowbit(x);
}
return ret;
} void Add(int pos) {
while(pos < maxn) {
C[pos] ++;
pos += lowbit(pos);
}
} int Num[105];
int main() {
int T;
scanf("%d",&T);
for(int kase = 1; kase <= T; ++kase) {
memset(C, 0, sizeof(C));
int N;
scanf("%d",&N);
for(int i = 0; i < N; ++i)
scanf("%d",Num+i);
sort(Num, Num+N);
int Ans = 0, LowZ = 0; //小于0的情况用LowZ 统计
for(int i = N-1; i >= 0; --i) {
for(int j = 0; j < i; ++j)
for(int k = j+1; k < i; ++k)
{
int sum = Num[i] + Num[j] + Num[k];
Ans += Sum(sum-1);
Ans += LowZ;
}
for(int j = i + 1; j < N; ++j)
for(int k = j + 1; k < N; ++k)
{
int sub = Num[k] - Num[j] - Num[i];
if(sub > 0) Add(sub);
else LowZ ++;
}
}
printf("Case %d: %d\n",kase, Ans);
}
return 0;
}

LightOJ 1372 (枚举 + 树状数组)的更多相关文章

  1. 「模拟赛20180307」三元组 exclaim 枚举+树状数组

    题目描述 给定 \(n,k\) ,求有多少个三元组 \((a,b,c)\) 满足 \(1≤a≤b≤c≤n\)且\(a + b^2 ≡ c^3\ (mod\ k)\). 输入 多组数据,第一行数据组数\ ...

  2. hdu1394(枚举/树状数组/线段树单点更新&区间求和)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1394 题意:给出一个循环数组,求其逆序对最少为多少: 思路:对于逆序对: 交换两个相邻数,逆序数 +1 ...

  3. lightoj 1088【树状数组+离散化】

    题意: 给你n个数,然后给你q个区间,然后问你这n个数有多少个在这个区间上: 思路: 树状数组搞搞,但是注意到数的范围很大,所以先离散化一下. 初始化初始化!!!卧槽,wa的我好郁闷... #incl ...

  4. Get Many Persimmon Trees_枚举&&二维树状数组

    Description Seiji Hayashi had been a professor of the Nisshinkan Samurai School in the domain of Aiz ...

  5. LightOJ 1085 - All Possible Increasing Subsequences 树状数组+离散

    http://www.lightoj.com/volume_showproblem.php?problem=1085 题意:求一个序列的递增子序列个数. 思路:找规律可以发现,某个数作为末尾数的种类数 ...

  6. LightOJ 1085(树状数组+离散化+DP,线段树)

    All Possible Increasing Subsequences Time Limit:3000MS     Memory Limit:65536KB     64bit IO Format: ...

  7. POJ-2029 Get Many Persimmon Trees---二维树状数组+枚举

    题目链接: https://vjudge.net/problem/POJ-2029 题目大意: 有N棵树在一个n*m的田里,给出每颗树的坐标 用一个s*t的矩形去围,最多能围几棵树 思路: 用二维树状 ...

  8. lightoj 1085【离散化+树状数组】

    题意: 求所有的上升子序列种数: 思路: 我想先离散化一下,然后用树状数组维护一下. 最终答案就是sum(n) ? 卧槽,好像是:然后就过了.. #include <bits/stdc++.h& ...

  9. Lightoj 1112 - Curious Robin Hood 【单点改动 + 单点、 区间查询】【树状数组 水题】

    1112 - Curious Robin Hood PDF (English) Statistics Forum Time Limit: 1 second(s) Memory Limit: 64 MB ...

随机推荐

  1. MySQL主从复制(一)

    whereis...命令的使用:

  2. router-link RangeError: Maximum call stack size exceeded

    报错的原因是路由不能写外部链接 写成<a href=""></a>

  3. 排序—时间复杂度为O(n2)的三种排序算法

    1 如何评价.分析一个排序算法? 很多语言.数据库都已经封装了关于排序算法的实现代码.所以我们学习排序算法目的更多的不是为了去实现这些代码,而是灵活的应用这些算法和解决更为复杂的问题,所以更重要的是学 ...

  4. EntityFramework Core笔记:保存数据(4)

    1. 基本保存 每个DBContext实例都有一个ChangeTracker,负责跟踪需要写入数据库的更改.当实例发生更改时,更改会被记录在ChangeTracker中,在调用 SaveChanges ...

  5. 利用ir.sequence自动生成序列号

    利用ir.sequence自动生成序列号 什么是序列号 可以这么理解,我有一个产品序号,编码的前缀是SOP,后缀是0001~9999的序号,没生成一个产品就自动流水加一,序列号不会重复,odoo中的i ...

  6. Vue js 的生命周期(看了就懂)

    转自: https://blog.csdn.net/qq_24073885/article/details/60143856 用Vue框架,熟悉它的生命周期可以让开发更好的进行. 首先先看看官网的图, ...

  7. 【转】Java 线程池

    什么是线程池? 线程池是指在初始化一个多线程应用程序过程中创建一个线程集合,然后在需要执行新的任务时重用这些线程而不是新建一个线程.线程池中线程的数量通常完全取决于可用内存数量和应用程序的需求.然而, ...

  8. input密码框输入后设置显示为星号或其他样式

    预览效果 核心代码 <div class="text-input" :class="right?'textinput-right':''"> < ...

  9. Floyd-蒟蒻也能看懂的弗洛伊德算法(当然我是蒟蒻)

    今天来讲点图论的知识,来看看最短路径的一个求法(所有的求法我以后会写,也有可能咕咕咕) 你们都说图看着没意思不好看,那今天就来点情景             暑假,_GC准备去一些城市旅游.有些城市之 ...

  10. github+jekyll个人博客搭建

    Thanks to https://blog.csdn.net/Hanghang_/article/details/78944672 跟着这个博客一步步搭建,从jekyll官网上找到自己喜欢的主题. ...