zoukankan      html  css  js  c++  java
  • 2020_CCPC长春L题 Coordinate Paper Exgcd贪心

    2020 CCPC Changchun gym102832L

    gzh
    ewm
    题意
    链接:点我点我
    你需要构造出一个长度为 (n) 的序列满足以下三个条件:

    1. (a_ige 0)
    2. ((sum_{i=1}^na_i)=s)
    3. 对于任意 (ige 2,; a_i=a_{i-1}+1) 或者 (a_i=a_{i-1}-k)

    (1le n,kle 1e5,1le sle 1e18)

    思路
    首先假设当 (ige 2) 的时候恒定有 (a_i=a_{i-1}+1) 成立,现在需要选出几个特殊的下标 (i)(a_i=a_{i-1}-k) ,其他下标依然满足 (a_i=a_{i-1}+1)

    如果第 (i) 个数转为特殊下标的话,序列的权值和会减少 ((n-i+1)*(k+1)) .
    修改操作只会让序列权值和减少,如果初始时一定要保证序列权值和大于等于 (s) 才行。

    所以初始 (a_1) 至少等于最小的非负整数 (ansL) 满足 (frac {(a_1+a_1+n-1)*n}{2}) 大于等于 (s) ,令 (c=frac {(a_1+a_1+n-1)*n}{2}-s) .
    如果 (c=0) 直接输出解即可。

    所以现在只有两种操作:

    1. (a_1=a_1+1) ,权值和加 (n)
    2. 选择一个 (i(2le ile n)) ,令 (a_i=a_{i-1}-k) ,权值和减少 ((n-i+1)*(k+1)) 且每个 (i) 只能被选中一次。

    求出一组合法解 ((a,b)) 满足 (c+b*n = (k+1)*a)(ale frac {n*(n-1)}2) 即可。
    使用扩展欧几里得求出 (a) 的最小非负整数解即可还原出整个数组来,但是要满足 (a_ile 0)
    又因为最小非负整数解是一组通解,所以我还可以得到任意多组解,包括 (a) 的次小非负整数解。

    实测只需要使用 (a) 的最小非负整数解和次小非负整数解即可通过本题。

    使用 (a) 还原数组的过程就是尽可能选择小的下标进行操作2。

    AC_CODE
    点我点我

    My approach to 2020 Changchun by Shanghai JTU Problem L is as follows:

  • 相关阅读:
    笔记(用Python做些事情)--变量(数字、字符串)
    笔记(用Python做些事情)--变量(日期和时间)
    服务设计-ETL-核心框架
    zookeeper-服务-应用
    HBASE-表设计-优化
    HBASE-读取数据-优化
    HBASE-数据写入-优化
    Zookeeper-客户端-zkclient-curator
    KAFKA-使用问题
    HBASE-Spark操作hbase数据-思考
  • 原文地址:https://www.cnblogs.com/Cwolf9/p/13966293.html
Copyright © 2011-2022 走看看