2017华南理工华为杯H bx值(容斥问题)
题目描述
对于一个nnn个数的序列 a1,a2,⋯,ana_1,a_2,\cdots,a_na1,a2,⋯,an,从小到大排序之后为ap1,ap2,⋯,apna_{p_1},a_{p_2},\cdots,a_{p_n}ap1,ap2,⋯,apn,定义它的 bxbxbx 值为满足 api≠api−1+1,1<i≤na_{p_i} \neq a_{p_{i-1}}+1, 1 < i \leq napi≠api−1+1,1<i≤n 的 iii 的个数。
给定 nnn 个数的一个排列,你需要计算它所有连续子序列的 bxbxbx 值之和。
输入格式
输入第一行包括一个正整数 TTT,表示数据组数。
对于每组数据,第一行一个整数 nnn,第二行 nnn 个整数,表示 nnn 个数的一个排列。
1≤T≤201 \leq T \leq 201≤T≤20
1≤n≤1000001 \leq n \leq 1000001≤n≤100000
1≤ai≤n1 \leq a_i \leq n1≤ai≤n
输出格式
对每组数据输出一个整数表示答案。
样例数据
输入
2
3
1 2 3
4
3 1 4 2
输出
0
5
备注
题解:
先计算每个长度为 i 的连续子串的时候的全部bx值:(i-1个), 每一个i有(n-i+1)个方案可以选择。 所以ans = ∑(n-i+1)*(i-1)。(1≤i≤n)。
然后就需要减去不合法的情况。就是找出相邻2个值在的连续子串。
我们就需要将a[i]的值记录一下相应的位置。eg. a[3] = 6, a[6] = 7。所以我们需要将包含a[3]和a[6]的子串,每一个子串都减去1个。
而包含a[3]和a[6]的子串有:(n-6+1)个从1开始包含这两个数的子串,而且在这些字串中从1~3一共又有3个不同开头相同结尾的子串。所以一共就是:(n-6+1)*3。
推广一下:每2个相邻度的数,在a串中会有2个位置,一个在前面pre,一个在后面back, (n-back+1)*(pre)。ans 就需要减掉这些。
#include <bits/stdc++.h> using namespace std;
typedef long long LL;
const int maxn = 1e5+;
int a[maxn];
int c[maxn];
void init()
{ }
void solve()
{
int n;
LL ans = ;
scanf("%d", &n);
for(int i = ;i<=n;i++) scanf("%d", &a[i]);
for(int i = ;i<=n;i++){
c[a[i]] = i;
ans += 1LL*(n-i+)*(i-);
}
for(int i = ;i<n;i++){
int pre = c[i];
int next = c[i+];
if(pre > next) swap(pre, next);
ans -= 1LL*pre*(n-next+);
}
printf("%lld\n", ans);
}
int main()
{
int t;
scanf("%d", &t);
while(t--){
init();
solve();
}
return ;
}
你努力的时候,比你厉害的人也在努力。
2017华南理工华为杯H bx值(容斥问题)的更多相关文章
- 2017华南理工华为杯D bx回文
比赛的时候队友过了,补补题XD. 题目链接:https://scut.online/p/125(赛后补题) 125. 笔芯回文 题目描述 bx有一个长度一个字符串S,bx可以对其进行若干次操作 ...
- bzoj2440 完全平方数 莫比乌斯值+容斥+二分
莫比乌斯值+容斥+二分 /** 题目:bzoj2440 完全平方数 链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2440 题意:求第k个小x数 ...
- HDU 6270 Marriage (2017 CCPC 杭州赛区 G题,生成函数 + 容斥 + 分治NTT)
题目链接 2017 CCPC Hangzhou Problem G 题意描述很清晰. 考虑每个家庭有且仅有$k$对近亲的方案数: $C(a, k) * C(b, k) * k!$ 那么如果在第$1$ ...
- 2020华为杯数学建模B题-RON建模 赛后总结与分析
好久好久没有写博客了...挺累的,从二月份开始找暑期实习,接着在进行暑期实习,然后马不停蹄地进行秋招,现在总算结束实习,前两天又参加了华为杯数学建模竞赛,感觉接下来就会很轻松了,希望能好好休息休息.这 ...
- (更新中)"华为杯" 武汉大学21级新生程序设计竞赛 非官方题解
"华为杯" 武汉大学21级新生程序设计竞赛 https://ac.nowcoder.com/acm/contest/31620#question D.和谐之树 思路:披着线段树外皮 ...
- bx值
bx值 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Problem De ...
- LOJ2542. 「PKUWC2018」随机游走【概率期望DP+Min-Max容斥(最值反演)】
题面 思路 我们可以把到每个点的期望步数算出来取max?但是直接算显然是不行的 那就可以用Min-Max来容斥一下 设\(g_{s}\)是从x到s中任意一个点的最小步数 设\(f_{s}\)是从x到s ...
- Trees in a Wood. UVA 10214 欧拉函数或者容斥定理 给定a,b求 |x|<=a, |y|<=b这个范围内的所有整点不包括原点都种一棵树。求出你站在原点向四周看到的树的数量/总的树的数量的值。
/** 题目:Trees in a Wood. UVA 10214 链接:https://vjudge.net/problem/UVA-10214 题意:给定a,b求 |x|<=a, |y|&l ...
- [HDU4336]Card Collector(min-max容斥,最值反演)
Card Collector Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
随机推荐
- IDEA-包层级结构显示(三)
IntelliJ IDEA包层级结构显示 如:A.B.C,在项目中希望以如下形式显示: A B C 效果: 再更换为A.B.C形式显示
- js提交图片转换为base64
$("#picAjax").change(function () { var strs = ""; var file = $("#picAjax&qu ...
- python列表-使用
一.列表用于循环 1.for循环 2. in 和 not in 3.多重赋值
- Soap从入门到实战
Soap从入门到实战 参考文章:https://howtodoinjava.com/spring-boot/spring-soap-client-webservicetemplate/ 使用的技术:s ...
- win10系统Docker和VMware WorkStation共存,远程工具连接Docker
摘要:win10安装docker进行学习的两种途径: Docker for Windows Installer.exe(地址https://download.docker.com/win/stable ...
- [2019杭电多校第十场][hdu6701]Make Rounddog Happy
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6701 题目大意为求满足 $max(a_{l},a_{l+1}\cdot \cdot \cdot a_{ ...
- [2019杭电多校第二场][hdu6599]I Love Palindrome String(回文自动机&&hash)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6599 题目大意为求字符串S有多少个子串S[l,r]满足回文串的定义,并且S[l,(l+r)/2]也满足 ...
- [常用类]StringBuffer 类,以及 StringBuilder 类
线程安全,可变的字符序列. 字符串缓冲区就像一个String ,但可以修改. 在任何时间点,它包含一些特定的字符序列,但可以通过某些方法调用来更改序列的长度和内容. 字符串缓冲区可以安全地被多个线程使 ...
- 提升JAVA代码的好“味道”
让代码性能更高 需要 Map 的主键和取值时,应该迭代 entrySet() 当循环中只需要 Map 的主键时,迭代 keySet() 是正确的.但是,当需要主键和取值时,迭代 entrySet() ...
- C# List<object> 按特定字段排序
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using S ...