zoukankan      html  css  js  c++  java
  • 3466. 【NOIP2013模拟联考6】选课(select) (Standard IO)

    Description

    你真的认为选课是那么容易的事吗?HYSBZ的ZY同志告诉你,原来选课也会让人产生一种想要回到火星的感觉。假设你的一周有n天,那么ZY编写的选课系统就会给你n堂课。但是该系统不允许在星期i和星期i+1的时候选第i堂课,也不允许你在星期n和星期一的时候选第n堂课。然后连你自己也搞不清哪种选课方案合法,哪种选课不合法了。你只想知道,你到底有多少种合法的选课方案。
     

    Input

    有多组数据,请读到文件末结束。
    对于每组数据仅一行,1个正整数 n。
     

    Output

    对于每组输出只有一行,1个非负整数,为选课方案数量 mod (10^9+7). 
     
    Solutions

    看了许多大佬的题解,发现巨难无比,什么容斥原理、逆元、环或者递推,一套接一套的。

    然而,有一位神犇在天时地利人和之际(打错了表),发现了规律,难什么的,不存在的。

    这个表即为从1到100000个答案的前缀和:

    0 0 1 3 16 96 675 5413 48800 488592 ......

    可以发现第i个前缀和为f[i]=(f[i-1]+f[i-2])*(i-1)+f[i-3];

    最后,每读入一个x,输出f[x]-f[x-1]即可(显然啊)。

    膜拜大佬!!

    代码 

    const
      mo=1000000007;
    var
      f:array [0..100001] of int64;
    procedure main;
    var
      i:longint;
    begin
      f[1]:=0; f[2]:=0;
      f[3]:=1; f[4]:=3;
      for i:=5 to 100000 do
        f[i]:=((f[i-1]+f[i-2])*(i-1)+f[i-3]) mod mo;
    end;
    
    procedure init;
    var
      x:longint;
    begin
      while not eof do
        begin
          readln(x);
          if f[x]<f[x-1] then writeln(f[x]-f[x-1]+mo)
                         else writeln(f[x]-f[x-1]);
        end;
    end;
    
    begin
      main;
      init;
    end.
  • 相关阅读:
    OJ练习31——T155 Min Stack
    OJ练习30——T125 Valid Palindrome
    OJ练习29——T119 Pascal's Triangle II
    最大公约数——414AMashmokh and Numbers
    数学——415B. Mashmokh and Tokens
    水题——415A. Mashmokh and Lights
    湖南大学2015年“新生杯”程序设计竞赛
    react的ES6写法
    【Ionic】ionic安装和项目的创建 及相关介绍
    Flex 弹性布局教程很不错
  • 原文地址:https://www.cnblogs.com/zyx-crying/p/9336290.html
Copyright © 2011-2022 走看看