E: number number number
来源:互联网 发布:智能自动化 编程技术 编辑:程序博客网 时间:2024/05/20 16:32
E: number number number
比赛时我是直接找规律的
ans[i] = 3*ans[i-1]-ans[i-2]+1
然后矩阵乘法
后来听说是直接找第2n+3个斐波那契数
#include <bits/stdc++.h>using namespace std;#define ll long long/*const int maxn = 100000;int f[21], a[100001], n;*/const int mo = 998244353;struct Matrix { ll a[3][3]; Matrix() {memset(a, 0, sizeof(a));} Matrix operator*(const Matrix &other) const { Matrix t; for (int i = 0; i < 3; i++) for (int j = 0; j < 3; j++) for (int k = 0; k < 3; k++) t.a[i][k] = (t.a[i][k]+a[i][j]*other.a[j][k])%mo; return t; }};int n;int main() { Matrix t; t.a[1][0] = t.a[2][1] = t.a[2][2] = 1; t.a[1][1] = 3; t.a[0][1] = -1; while (scanf("%d", &n) != EOF) { n--; Matrix x = t, y; y.a[0][0] = y.a[1][1] = y.a[2][2] = 1; while (n) { if (n%2) { y = y*x; } n = n/2; x = x*x; } ll ans = (y.a[0][0]*4+y.a[1][0]*12+y.a[2][0])%mo; ans = (ans+mo)%mo; printf("%lld\n", ans); } /*f[0] = 0; f[1] = 1; for (int i = 2; i <= 20; i++) f[i] = f[i-1]+f[i-2]; scanf("%d", &n); a[0] = 1; while (n--) { for (int i = maxn; i >= 0; i--) if (a[i]) { for (int j = 1; j <= 20; j++) { a[i+f[j]] = 1; //if (i+f[j] == 24) printf("%d %d\n", i, f[j]); } } } for (int i = 0; i <= maxn; i++) if (!a[i]) { printf("%d\n", i); break; }*/}
阅读全文
0 0
- E: number number number
- Number
- number
- number
- Number
- number
- number
- Number
- Number
- NUMBER
- Number
- Number()
- number
- Number
- Number
- 263-e-Ugly Number
- 136. Single Number E
- 476. Number Complement (E)
- ICPC2017网络赛(沈阳)1005&HDU6198 number (矩阵+快速幂)
- 加载网页和选择工资
- 进程、线程、协程
- 标准I/O库和系统调用区别(转载)
- 【Socket编程】Python实现简易Web服务器
- E: number number number
- Java 简介
- U-Boot移植过程概要记录
- leetcode试水
- Android开发技巧——使用RecyclerView实现分组列表
- MySQL InnoDB索引
- Simulink 中 model advisor 检查规则自定义
- C++ 封装文件操作类
- JetBrains系列产品激活(PyCharm,IDEA等)