zoukankan      html  css  js  c++  java
  • [CTSC2017]吉夫特

    题目描述

    简单的题目,既是礼物,也是毒药。

    B 君设计了一道简单的题目,准备作为 gift 送给大家。

    输入一个长度为 n 的数列 a1, a2, ... , an 问有多少个长度大于等于 2 的不上升的子序列

    输出这个个数对 1000000007 取模的结果。

    G 君看到题目后,为大家解释了一些基本概念。

    我们选择任意多个整数 bi 满足

    1 ≤ b1 < b2 < · · · < b_{k−1} < bk ≤ n

    我们称 a_b1, a_b2, ... , a_bk 是 a 的一个子序列。

    如果这个子序列同时还满足

    ab1 ≥ ab2 ≥ · · · ≥ abk−1 ≥ abk

    我们称这个子序列是不上升的。

    组合数 (m n ) 是从 n 个互不相同的元素中取 m 个元素的方案数。

    这里要特别注意,因为我们只考虑不上升子序列,所以在求组合数的过程中,一定满足 n ≥ m。

    我们在这里强调取模 x mod y 的定义:

    x mod y = x − ⌊x/y⌋ × y

    其中 ⌊n⌋ 表示小于等于 n 的最大整数。

    x mod 2 > 0,就是在说 x 是奇数。

    与此同时,经验告诉我们一个长度为 n 的序列,子序列个数有 O(2n) 个,所以我们通过对答案取模来避免输出过大。

    B 君觉得 G 君说的十分有道理,于是再次强调了这些基本概念。

    最后, G 君听说这个题是作为 gift 送给大家,她有一句忠告。

    “Vorsicht, Gift!”

    “小心. . . . . .剧毒! ”

    输入输出格式

    输入格式:

    第一行一个整数 n。

    接下来 n 行,每行一个整数,这 n 行中的第 i 行,表示 ai。

    输出格式:

    一行一个整数表示答案。

    输入输出样例

    输入样例#1: 复制
    4
    15
    7
    3
    1
    输出样例#1: 复制
    11

    说明

    • 对于前 10% 的测试点, n ≤ 9, 1 ≤ ai ≤ 13;

    • 对于前 20% 的测试点, n ≤ 17, 1 ≤ ai ≤ 20;

    • 对于前 40% 的测试点, n ≤ 1911, 1 ≤ ai ≤ 4000;

    • 对于前 70% 的测试点, n ≤ 2017;

    • 对于前 85% 的测试点, n ≤ 100084;

    • 对于 100% 的测试点, 1 ≤ n ≤ 211985, 1 ≤ ai ≤ 233333。所有的 ai 互不相同,也就是说不存在 i, j 同时满足 1 ≤ i < j ≤ n 和 ai = aj。

  • 相关阅读:
    dedecms内容页调用缩略图 缩略图多种用法(借鉴)
    线性回归
    Jupyter Notebook 快捷键
    etcd入门
    Centos7 Docker安装
    TFIDF介绍
    Ceph 概念理解
    Nifi简介及核心概念整理
    经典排序算法总结
    Hbase协处理器
  • 原文地址:https://www.cnblogs.com/Y-E-T-I/p/8964138.html
Copyright © 2011-2022 走看看