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;
      }

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

  • 相关阅读:
    POJ 1953 World Cup Noise
    POJ 1995 Raising Modulo Numbers (快速幂取余)
    poj 1256 Anagram
    POJ 1218 THE DRUNK JAILER
    POJ 1316 Self Numbers
    POJ 1663 Number Steps
    POJ 1664 放苹果
    如何查看DIV被设置什么CSS样式
    独行DIV自适应宽度布局CSS实例与扩大应用范围
    python 从入门到精通教程一:[1]Hello,world!
  • 原文地址:https://www.cnblogs.com/Angel-Demon/p/11371828.html
Copyright © 2011-2022 走看看