• 10-17


    两个月没写过博客的辣鸡回来写博客了(逃)

    和别的学校连考第二天,100/300,完美被虐。

    先说第一天的题吧。

    T1:次芝麻

    题面:小x有n个芝麻,小k有m个芝麻,两人中芝麻数较小的人会从另一个人手里抢走自己有的那么多芝麻,若两人的芝麻数相同,则小x拿走小k的芝麻,k个回合后两人会吃掉自己剩的芝麻,求两人谁吃的最少。

    哎哟我去!良心出题人啊!完美的NOIPday1t1难度啊,这么水的模拟么!不多BB,看数据量马上A掉。

    对于30%的数据,n<=10^5,m<=10^5,k<=10^5;

    对于60%的数据,,n<=10^5,m<=10^5,k<=10^9;

    对于100%的数据,n<=10^9,m<=10^9,k<=10^9;

    凉心出题人啊!太凉心了!拿了60分滚粗,没有推出来正解。

    正解:对于任意一个状态(n,m),若n<m,则有(2*n,m-n),有(n+m)*2%(n+m)=0,且2*n%(m+n)=2*n,则2*m%(m+n)=m-n。那么对于k次操作来说,最小值为min(n*2^k&(m+n),m*2^k%(m+n))

    T2:给一个数列,称{xi,xj}为坏对,当i<j,且xi%xj==k的时候,求有多少个子数组中不包含坏对。

    emmmm给出的正解太短,一句话题解,看不懂,不过帆神的想法还是很牛逼的。

    记录对于每个数位置为i来说,左边最靠近他的坏对的做左端点x,则存在以i为结尾的子数组x-i个其中不存在坏对。

    求坏对:非常玄学的一个时间复杂度,也就是找x的因数,类似于筛法,比筛法慢,但绝对比枚举到sqrt(x)要快得多。

    struct one
    {
        int y,next;
    };
    one e[5000000];
    void insert(int aa,int bb)
    {
        e[++len].next=lin[aa];
        lin[aa]=len;
        e[len].y=bb;
    }
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
        maxn=max(a[i],maxn);
    }
    for(int i=1;i<=maxn;i++) { for(int j=1;i*j<=maxn;j++) { insert(i*j,i);
    } }

    T3:怎么感觉像是要表白?

    题面:有一个圣诞树有N层,每层有Ai个位置能放置礼物,有M种不同颜色的礼物可被选择,为了让我的刀娘喜欢(手动滑稽),同层相邻的两个礼物颜色不能一样,相邻两层的颜色集合不能一样,求方案数。

    题解......dp,看不懂。

    day1就拿了T1的60分,T2的30分会写,但是当时心态太浮躁了,一心想写正解,结果就没拿到分。

  • 相关阅读:
    java 连接SQL Server
    JAVA泛型
    JAVA 数组遍历
    JAVA注释
    Python正则表达式
    python练习题二
    Python函数
    Python练习题一
    重学python-列表的一些操作
    重学python-python-pandas库
  • 原文地址:https://www.cnblogs.com/assassinyyd/p/7682700.html
Copyright © 2020-2023  润新知