首页 > 代码库 > NEYC 2017 游记

NEYC 2017 游记

day 1:
  result:
    sum_rank: 11   school_rank:1
   水题在你高估的时候就已经不水了
   sum:有个快速乘类似快速幂:
      int ans=0;
      while(y)
  {
    if(y&1)ans=(ans+x)%P;
    y>>=1;
    x=(x<<1)%P;
  }
 rest: sum cactus
day 2:
  result:
    sum_rank: 18   school_rank:6
 beetle:甲虫要离散,特殊的离散技巧(Orz 离散坑)
   maths:不要一头扎进欧拉,这个题是个specail递推式,线筛
   divisorful:最后那个特殊数,可以推出一个不是d的数一定乘不出d,所以就一遍遍加素数和他的次幂及与集合里的乘积,之后再筛
 maths:打表不要浪100k封顶,人不能太贪
  rest: beetle divisorful
day 3:
  result:
    sum_rank: 1   school_rank: 1
   水题欢乐送
   calculator:首先猜想由哪些数钩成的数不会太多,之后由打表得出具体范围,再然后用3*1e6的时间算出所有数,之后用dp解决
                 dp的时候规定加到那个数用f[i]表示i在加到这个数的大背景下最少用多少次,由于b的加一定所以f最小就可以用
                 背包的思想滚出来所有的f,看看那个行不行
  rest: 0
day 4:
  result:
    sum_rank: 5  school_rank: 2
   prime:从左到右一个一个筛的话会超时,因为1e6*10=1e7,我们还剩一个小常数的时间这样的话一旦有一个大指数,就把时间挂掉了
            线筛也不行,所以就用标记法,用On的效率搞定
   share:

         bitset:

#include<bitset>
bitset<length>bit;
bit.count()      1s number
bit.size()         length
all: << >> ~ | & ^ 
bit.set()          1
bit.reset()       0
bit[]                0~length-1
cout<<bit       000000000000.......

            用bitset优化背包问题,多为存在性,用二进制模仿背包累加过程:先移后或。这样就可以掉一个32(看电脑)。
  rest: prime
day 6:
  result:
    sum_rank: 22  school_rank: 7
   atm:见题解,很骚
   tree:遇见了无分配律的抑或,所以就要模之后讨论余数,因为他都告诉你了不超过15,所以就模16(这个模多少要看二进制位数,一定要使整位
          要不然会有影响)
   escape: 利用bfs的分层,可知后面的一定没有前面的优,经分析可知,回到原地没有任何意义因为他除了给你加了几步之外没有任何收益
     而且先碰到的一定为最优的,可以理解为灌水
           二分:
      平衡树式:
        int l=0,r=n,mid,ans;                   每次分,把答案确定在左(右)边和中间,扣下中间,判断是否合法,若合法
        while(l<=r)                     计为答案,因为它可能就是最终答案,抠下去之后就不复存在,故,所有答案
        {                        1被当作不优的一边舍掉2被扣下纪录,故一定找到答案,又由于每次得到的
          mid=(l+r)>>1;              答案都比上次更优故最后剩下的为正确答案
          if(check(mid)) ans=mid,l=mid+1;
          else r=mid-1;
        }
      线段树式:
        int l=0,r=n,mid;                一定能分完,而且在向答案逼近,但是最后可能落在len=2上被卡,所以最后
        while(l+1<r)                  要把z和y拿出来判断一下
        {
          mid=(l+r)>>1;
          if(check(mid)) l=mid;
          else r=mid;
        }
        if(check(r))
          blabla(r);
        else
          blabla(l);
   delta:运用所谓的差分记录每次修改的变化,等到积累到一定量时重构(替罪羊思想)
  rest:tree escape delta
day 7:
  result:
    sum_rank: 1 school_rank: 1
   水题欢乐送
day 8:
  result:
    sum_rank: 31  school_rank: 6
   sorce:论出题人的一百种死法(Orz 大模拟坑)
   game:用等差数列球和公式来判断是否合法然后:
                 小于n的数都可以,小于n-1的数都可以......,小于n(n-1)/2的都可以所以就从大到小取,所以只要是等差就可以
          然后我就从大到小减,因为减去之后仍是等差所以这是一个十分科学的贪心
   virus:Orz(状压坑)
   trade:Orz(网络流坑)
  rest: sorce game virus trade
坐等填坑.......

     虽然没有拿到金,掉到了银1,但是也许这就是我的水平。

     在前几天水题多的时候我可以用对拍涨分可是到了后面真正的难题的时候我就弱的不行,暴力也许有用但始终不如正解来的痛快,那些题有些我真的不会,我觉得那是我对知识的强化不够,或者是对新知识还没有熟识,还有而有些题可以看出我透过现象看本质的能力还不够,像离散,二分,差分,重建,简单dp,贪心,模拟这些划水技巧我还是比较弱的,还有我的代码能力,虽然做了许多数据结构但还是很弱。

     最后说一句从入坑以来的感受,现在所有的一切都是OI的馈赠,我既然已经把人生放在了这儿,为什么不走的最远。

NEYC 2017 游记