zoukankan      html  css  js  c++  java
  • HDU-6672-Seq

    题目传送门

    ps:一般这种给一个数列求第n项,n还特别大的。要么矩阵快速幂,要么转化递推式。不过这题数据也特别多有100000组,所以就算矩阵快速幂可能也要超时,而且我还没推出来。转化递推式需要比较强的数学基础,我也转化不了。ε=(´ο`*)))唉,只能打表找规律。

    • 打表代码
      #include "bits/stdc++.h"
      using namespace std;
      const int MAXN = 110;
      int a[MAXN];
      int main() {
          a[1] = 1;
          int sum = 0;
          for (int i = 2; i <= 100; i++) {
              sum += a[i - 1] * (i - 1);
              a[i] = sum % i;
          }
          for (int i = 1; i <= 100; i++) 
              printf("%d %d
      ", i, a[i]);
          return 0;
      } 

    sol:由上面代码打表后发现a[i] = i - 1或者a[i] * 2 = i的情况经常出现,罗列a[i] = i - 1的情况发现都满足i % 6 = 4,而a[i] * 2 = i 的情况下都满足i % 6 = 0 或 i % 6 = 2。其实这时候已经能猜到数列6个一组有规律,接下去应该把所有i % 6 = 1, i % 6 = 3, i % 6 = 5的情况分别罗列一下就能发现剩下的规律,而我当时却把这三种情况放一起看了。 i % 2 == 1。导致规律不易观察又花费了不少时间。

    • 规律
      #include "bits/stdc++.h"
      using namespace std;
      typedef long long LL;
      int main() {
          LL t, n;
          scanf("%lld", &t);
          while (t--) {
              scanf("%lld", &n);
              switch(n % 6) {
                  case 0 : printf("%lld
      ", n / 2); break;
                  case 1 : printf("%lld
      ", n / 6 * 4 + 1); break;
                  case 2 : printf("%lld
      ", n / 2); break;
                  case 3 : printf("%lld
      ", n / 6); break;
                  case 4 : printf("%lld
      ", n - 1); break;
                  case 5 : printf("%lld
      ", n / 6); break;
              }
          }
          return 0;
      }

      有一段时间没写博客了,也没有好好刷题了。乘着百度之星开始继续努力吧。

  • 相关阅读:
    Servlet 的生命周期
    关于JSP
    JQuery事件绑定
    JavaScript中操作元素
    javaScript的函数使用
    Servlet 的API
    JavaScript中BOM对象
    gridview 绑定时间列 取短日期
    A4纸网页打印中对应像素的设定和换算
    动态添加 控件 并获取值
  • 原文地址:https://www.cnblogs.com/Angel-Demon/p/11371828.html
Copyright © 2011-2022 走看看