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 ...
随机推荐
- 【ABAP系列】SAP 读取生产订单 记入文档的货物移动明细
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP 读取生产订单 记入文档的 ...
- python批量下载验证码,用来做验证码处理
刚学到爬虫识别验证码,所以自己建一个获取验证码的类,感兴趣的道友,可以看看,代码如下: import requests import time import os import re class Pi ...
- ceph部署问题解决
注意:1.ceph-deploy实用程序将输出文件到当前目录.执行ceph-deploy时确保你在这个目录下.2.不要使用sudo调用ceph-deploy,要么以root用户身份运行它,因为它不会发 ...
- Hibernate的批量抓取
批量抓取理解:如果我们需要查找到客户的所有联系人的话,按照正常的思路,一般是首先查询所有的客户,得到返回的客户的List集合.然后遍历List集合,得到集合中的每一个客户,在取出客户中的联系人(客户表 ...
- [Markdown] 01 简单应用 第一弹
目录 0. "调用函数前必先声明" 0.1 Table of Content 0.2 分割线 0.3 引用 0.4 标记 0.5 关于 html 0.6 代码块 用法 1 用法 2 ...
- C# TCPListener
1: 有两个地方必须做异常处理,异常类型为IOException 服务器读客户端发来的信息时: LeafTCPClient client = (LeafTCPClient)ar.AsyncState; ...
- Java虚拟机最多支持多少个线程?
作者:miracle1919 来源:http://sina.lt/getP McGovernTheory在StackOverflow提了这样一个问题:Java虚拟机最多支持多少个线程?跟虚拟机开发商 ...
- 用命令行远程导出MySQL数据
mysqldump -h10.10.9.197 -uroot -proot --default-character-set=utf8 0610_eshop >C:/Users/Adm inist ...
- 第7章 PTA查找练习题
这道题与第7章查找有关,当时提前看到,翻到书里面的算法,然后打进去,虽然是正确的,但是那时候并不知道二叉排序树的基础知识,包括插入查找的来龙去脉,现在已经学到了,有了一定了解,发现题目只用到了其中部分 ...
- 回溯--- Permutations
46.Permutations (Medium)](https://leetcode.com/problems/permutations/description/) [1,2,3] have the ...