zoukankan      html  css  js  c++  java
  • [CS Academy] Infinity Array

    题意

    • 有一个长度为n的正整数序列(a_{0cdots n-1}),有一个无限序列(b_i),其中(b_i=a_{i ext{mod}n})
    • 有m组限制,每组限制形如(sum_{i=l}^rb_igeq w)(sum_{i=l}^rb_ileq w)
    • (sum a_i)有多少种取值,如果有无限种则输出(-1),保证(sum a_ileq10^9)
    • (n,mleq1000)

    分析

    很显然,这个题目里面的区间和的形式可以转化成两个前缀和的差分的一个限制,我们只要考虑到这个区间和的约束,总可以通过某种方式在两边减去一些(S=sum a_i)来变成只在一段中的一个前缀和差分,也就是映射到只对应于原来的(0cdots n-1)范围内前缀和的一个形式。
    正整数的限制就是类似于(f_ileq f_{i+1}-1)
    我们考虑,最终这个(S)的取值一定是类似于一个区间,只要是超过了这个区间,对应差分约束系统里面就一定会出现负环。现在的问题就在于,我们如何来区分这个区间的(l)(r),从而能够非常容易地统计出答案?
    考虑我们对于(S)来做二分然后做差分约束,系统无解的时候,找到对应的负环里面的(S)的系数(c)。如果(c<0),说明(S)太大了,如果(c>0)说明(S)太小了,如果(c=0)的时候,那无论怎样都会存在这个负环,答案一定为(0)

  • 相关阅读:
    T-SQL逻辑查询的各阶段
    linqtosql(GroupBy/Having/Count/Sum/Min/Max/Avg操作符)
    jquery获取select下拉框的值以及change时间绑定
    英汉翻译功能的简单实现
    jQuery zTree默认加载一级几点
    Linq第一篇
    vs2015+win10搭开发环境
    asp.net mvc 中使用静态页
    .net中的异步操作
    (转载)TFS2013安装+配置
  • 原文地址:https://www.cnblogs.com/wendavid/p/8886726.html
Copyright © 2011-2022 走看看