zoukankan      html  css  js  c++  java
  • [比赛|考试]nowcoder NOIP提高组组第二场

    160/300pts,rank16(100,30,30)

    在自身找毛病,首先做题感觉还不不够认真,比如T3那个我一开始审出来了,然后tmd忘了。。。gg。。。T1AC没啥好赞美的,T2T3暴力没拿全啊。。。

    sjzez大佬ztb180pts太强了相比我这个连树剖都不会写的就是个菜狗啊

    吐槽T1动态题面,除了T1动态题面,另外两道题都很吼哇(反正我做不出来的题都很吼)(不过感觉ranklist前几页都是T1AC的)

    下面是题解


    T1.方差

    一个长度为(m)的序列(b[1cdots m]),我们定义它的方差为(displaystyle frac 1 m sum_{i=1}^m(b_i-ar b))其中 (b)表示序列的平均值。
    可以证明的是,如果序列元素均为整数,那么方差乘以(m^2)之后,得到的值一定是整数。
    现在有一个长度为(N)的序列(a[1cdots N]),对每个(i = 1)~$ N$,你需要计算,如果我们删除 (a[i]),剩下的 (N-1) 个元素的方差乘以 ((N-1)^2) 的值。

    下面我们令(displaystyle s=sum_{i=1}^mb_i)

    推推式子,对于序列b的方差乘以(m^2),即

    (displaystyle m sum_{i=1}^m(b_i-ar b)\displaystyle=msum_{i=1}^mb_i^2-2msum_{i=1}^mb_iar b+msum_{i=1}^mar b^2\displaystyle=msum_{i=1}^mb_i^2-2mar bsum_{i=1}^mb_i+mar b^2sum_{i=1}^m1\displaystyle=msum_{i=1}^mb_i^2-2ssum_{i=1}^mb_i+m^2ar b^2\displaystyle=msum_{i=1}^mb_i^2-2s^2+s^2\displaystyle=msum_{i=1}^mb_i^2-s^2)

    所以我们只需要处理所有数的平方和,所有数的和就行了。注意精度问题(开long long就够了,请看下面代码的注释)

    #include <bits/stdc++.h>
    using namespace std;
     
    int a[100010], sqra[100010], n;
    long long tot, sqrtot;
     
    int main()
    {
        scanf("%d", &n);
        for (int i = 1; i <= n; i++)
        {
            scanf("%d", &a[i]);//1e4
            sqra[i] = a[i] * a[i];//1e8
            tot += a[i];//1e9
            sqrtot += sqra[i];//1e13
        }
        for (int i = 1; i <= n; i++)
        {
            long long fuck1 = sqrtot - sqra[i];//1e13
            long long fuck2 = tot - a[i];//1e9
            printf("%lld%c", (n - 1) * fuck1 - fuck2 * fuck2, i == n ? '
    ' : ' ');//1e18
        }
        return 0;
    }
    

    T2.分糖果

    N 个小朋友围成一圈,你有无穷个糖果,想把其中一些分给他们。
    从某个小朋友开始,我们顺时针给他们标号为 1 ~ N。第 i 个小朋友可以得到至多 a[i],至少 1 个糖果。
    问,有多少种分配方案使得每一对相邻的小朋友拿到的糖果数不同。答案对 10^9 + 7 取模。

    对全部的测试数据,n <= 10^6, a_i <= 10^9

    • 10 分的数据,n <= 4
    • 10 分的数据,n <= 100, a_i <= 20
    • 20 分的数据,n <= 100, a_i <= 100
    • 10 分的数据,n <= 10^5, a_i 全部相等
    • 30 分的数据,n <= 10^5, a_i 为随机生成
    • 20 分的数据,n <= 10^6.

    我的预计是骗前50分,最后拿到30分(懒得去找哪里出锅了)。对于(nle100,a_ile100)的情况,可以直接暴力dp。(a_i)全部相等参见pj组T3,打递推or通项。

    正解要搞搞rc原理什么的,反正我不透彻,不放代码了

    T3.集合划分

    visit_world 得到了 {1, 2, ... , n} 的 (2^n - 1) 个非空子集,他计划把这些集合分给小 S 和小 T,每个子集恰好给其中一个人。
    分配规则是这样的:
    1. 若存在两个集合属于同一个人,那么这两个集合的并也要属于那个人
    2. 有 m 个集合是小 S 特别喜欢的,你要把这些集合全部给小 S
    3. 小 S 拿到了恰好 k 个集合。
    请给出一种方案,或者说明无解。

    有30分部分分是m=0的,我写了个假的贪心(太tm假了)当时我都没看出来,直到群里某人提醒。。。

    这题特别难,全场1人AC。。。

    m=0时候是一个二进制拆分构造什么的

    m>0的时候反正各种xjb推不会

    以后遇到这种题有两种思路一个是暴力一个是贪心

    贪心不对我tm模拟退火,遗传啊

    正解不想再透彻一遍了············


    作为bruteforce选手,希望下一次tg组赛能拿稳了暴力分,Wannafly比赛好像就是让我掉rating的。。。不过计rating的好像除了tg就Wannafly了

  • 相关阅读:
    转:选择学习“下一个”程序语言
    再谈 Web 字体的现状与未来
    堪称2008年最漂亮的50组图标(上)
    堪称2008年最漂亮的50组图标(下)
    回帖整理: 互联网的未来, 我们的未来, 算一个预告吧, 有空我会把这些观点一一展开
    [回帖整理]创业建议
    也论PageController/FrontController与MVC
    [回帖整理] 创业难
    是否非要用interface关键字来实现接口?
    又论社区风气, 与程序员是干嘛地的.
  • 原文地址:https://www.cnblogs.com/oier/p/9655741.html
Copyright © 2011-2022 走看看