链接:Link 耗时:0.139s
前言
这道题的主要思路就是打表,看看Fibonacci数列模n几个一循环。但由于这题给的数太大了,从而在细节上耗了很久。在此记录一下:
var
x: qword;
y: longint;
begin
x := 1<<64-1;
y := 100;
x := x mod y; //报错201
x := x mod qword(y); //正确
end.
Code
var
a,b: qword;
_, n, i, k, cnt: longint;
f: array [1..1000000] of longint;
fun继续阅读 »
今天开始学习数论方面的算法。这部分在NOIP中并不常出现,即使出现了也不会像高联这么难(。。。)。
什么是扩展欧几里得算法
所谓欧几里得算法,实际上就是辗转相除法——求两个数最大公约数的一种高效算法。而扩展欧几里得算法则是来源于于一类方程的解决:
$$ax+by=gcd(a,b)$$
这有点像是裴蜀定理的一般形式。和裴蜀定理类似,这类方程也有无数多个整数解。如何高效率地求得它的一组特解呢?
代码
pascal
procedure gcd_ex(a, b: longint; var d: longint; var x, y: longint);
begin
if b = 0 then
begin
继续阅读 »
记得11年的时候,觉得这道题爆难,根本无从下手。三年后再次回顾,终于AC了,就当是对表达式求值和动态规划的复习吧。
题目:Link
```cpp
// Accepted.
include <iostream>
define Mod 10007;
using namespace std;
typedef struct {
long long v0; //当前值为0的个数
long long v1; //当前值为1的个数
char ch; //当前字符
} vertex;
vertex f[100000];
void merge_sum(int p) {
int w0 = f[p-1继续阅读 »