zoukankan      html  css  js  c++  java
  • 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} eq a_{p_{i-1}}+1, 1 < i leq napi​​​​api1​​​​+1,1<in 的 iii 的个数。

    给定 nnn 个数的一个排列,你需要计算它所有连续子序列的 bxbxbx 值之和。

    输入格式

    输入第一行包括一个正整数 TTT,表示数据组数。
    对于每组数据,第一行一个整数 nnn,第二行 nnn 个整数,表示 nnn 个数的一个排列。
    1≤T≤201 leq T leq 201T20
    1≤n≤1000001 leq n leq 1000001n100000
    1≤ai≤n1 leq a_i leq n1ai​​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 就需要减掉这些。

     1 #include <bits/stdc++.h>
     2 
     3 using namespace std;
     4 typedef long long LL;
     5 const int maxn = 1e5+10;
     6 int a[maxn];
     7 int c[maxn];
     8 void init()
     9 {
    10 
    11 }
    12 void solve()
    13 {
    14     int n;
    15     LL ans = 0;
    16     scanf("%d", &n);
    17     for(int i = 1;i<=n;i++) scanf("%d", &a[i]);
    18     for(int i = 1;i<=n;i++){
    19         c[a[i]] = i;
    20         ans += 1LL*(n-i+1)*(i-1);
    21     }
    22     for(int i = 1;i<n;i++){
    23         int pre = c[i];
    24         int next = c[i+1];
    25         if(pre > next)  swap(pre, next);
    26         ans -= 1LL*pre*(n-next+1);
    27     }
    28     printf("%lld
    ", ans);
    29 }
    30 int main()
    31 {
    32     int t;
    33     scanf("%d", &t);
    34     while(t--){
    35         init();
    36         solve();
    37     }
    38     return 0;
    39 }
    View Code

    你努力的时候,比你厉害的人也在努力。

  • 相关阅读:
    Key-Value Memory Network
    Deep Mask Memory Network with Semantic Dependency and Context Moment for Aspect Level Sentiment Clas
    Deep Memory Network在Aspect Based Sentiment方向上的应用
    Deep Memory Network 深度记忆网络
    Self Attention 自注意力机制
    Attention基本公式及其变种
    *端策略优化算法(PPO)
    Policy Gradient 算法
    一本通 农场派对
    A
  • 原文地址:https://www.cnblogs.com/denghaiquan/p/6813751.html
Copyright © 2011-2022 走看看