Codevs 1065 01字符串
题目描述 Description
输出仅有0和1组成的长度为n的字符串,并且其中不能含有3个连续的相同子串。
输入描述 Input Description
输入文件只有一行一个整数n,表示有0和1组成的字符串的长度。0<=n<=30。
输出描述 Output Description
输出文件只有一行一个整数,表示所有满足条件的字符串的个数。
样例输入 Sample Input
1
样例输出 Sample Output
2
分析
设a[i]表示第i个位置的字符
f[i]表示第i长度的字符串有多少个
当a[i+1]=a[i] 时 f[i+1]=f[i]
f[i+2]=f[i+1]=f[i]
当a[i+1]<>a[i] 时 f[i+1]=f[i];
f[i+2]=2*f[i+1]=2*f[i];
综合两种情况可以得出
f[i+1]=2*f[i];
f[i+2]=3*f[i]=f[i+1]+f[i];
代码如下
program p1065;
var n,i:longint;
f:array[0..2] of longint;
begin
readln(n);
f[0]:=2;
f[1]:=4;
for i:=2 to n-1 do
f[i mod 3]:=f[(i-1) mod 3]+f[(i-2) mod 3];
write(f[(n-1) mod 3]);
end.
评测结果
测试点#word0.in 结果:AC 内存使用量: 256kB 时间使用量: 1ms
测试点#word1.in 结果:AC 内存使用量: 256kB 时间使用量: 1ms
测试点#word2.in 结果:AC 内存使用量: 128kB 时间使用量: 1ms
。。。
原来图片挂了,好纠结=-=