CCF2013 4有趣的數

2021-08-16 17:15:00 字數 2380 閱讀 3974

試題編號:

201312-4

試題名稱:

有趣的數

時間限制:

1.0s

記憶體限制:

256.0mb

問題描述:

問題描述

我們把乙個數稱為有趣的,當且僅當:

1. 它的數字只包含0, 1, 2, 3,且這四個數字都出現過至少一次。

2. 所有的0都出現在所有的1之前,而所有的2都出現在所有的3之前。

3. 最高位數字不為0。

因此,符合我們定義的最小的有趣的數是2013。除此以外,4位的有趣的數還有兩個:2031和2301。

請計算恰好有n位的有趣的數的個數。由於答案可能非常大,只需要輸出答案除以1000000007的餘數。

輸入格式

輸入只有一行,包括恰好乙個正整數n (4 ≤ n ≤ 1000)。

輸出格式

輸出只有一行,包括恰好n 位的整數中有趣的數的個數除以1000000007的餘數。

樣例輸入

4

樣例輸出

3

第一眼看還以為挺簡單,再一想想這量級。。。肯定不能用暴力的方法了。

不過,還是有個暴力的**,超時了,得了20分。

#includeusing namespace std;

int num[1005]={};

int count=0;

void gooneplace(int place)

return false;

}bool check01()

if(num[i]==1&&point==1)

} if(point==1)

if(point==-1)

return false;

}bool check23()

if(num[i]==3&&point==1)

} if(point==1)

if(point==-1)

return false;

}int main()

}} num[1]++;

} cout《大家看看就好,不要和我一樣無聊。

最開始想了一種方法,比方說:

兩串數000....00111....11和222....22333....33。

n個0,m個1;x個2,y個3,然後n+m+x+y-1個位置,計算情況。

本來我以為這是高中的題目,只是我忘了怎麼做,結果問數學院的同學,她直接不想幫我算t_ t。

剛剛看到乙個用這個方法做的

於是看了看別人的題目分析,用到狀態這一抽象名詞。

我理解了一下,這個大概是和我們寫vhdl時候,定義的狀態是相同的。

這裡可以這樣分析:

先是最高位,只能是2

2——0  : 後面還可以接1或3

0——0  : 延續當前情況

——1  : 後面還可以接3

——2  : 延續當前情況

——3  : 後面還可以接1

——1  : 不能成立,1不能在0前面pass

——2  : 延續當前情況

——3  : 後面還可以接0或1

3——0  : 後面還可以接1

——1  : 不能成立,1不能在0前面pass

——2  : 不能成立,2不能在3前面pass

——3  : 延續當前情況

繼續分析歸納出六種狀態

注:這六種狀態歸納出來後面接的意思是可以改變當前狀態的接法

即接當前狀態不存在的數。

0 狀態——0 1 3

1 狀態——1 3

2 狀態——0 1

3 狀態——3

4 狀態——1

5 狀態——無

當前狀態0 <—— a.上一狀態0接2;

當前狀態1 <—— a.上一狀態0接0;b.上一狀態1接2或0;

當前狀態2 <—— a.上一狀態0接3;b.上一狀態2接3;

當前狀態3 <—— a.上一狀態2接1;b.上一狀態3接1或2;

當前狀態4 <—— a.上一狀態1接3;b.上一狀態2接0;c.上一狀態4接0或3;

當前狀態5 <—— a.上一狀態3接3;b.上一狀態4接1;c.上一狀態5接1或3;

最後直接輸出最後的狀態5就可以了

**如下:

(吸取了前人經驗,long long 定義變數)

#includeusing namespace std;

const long long mod=1000000007;

long long state[6][1005];

int main()

state[0][1]=1;

for(long long i=2;i

ccf 有趣的數

問題描述 我們把乙個數稱為有趣的,當且僅當 1.它的數字只包含0,1,2,3,且這四個數字都出現過至少一次。2.所有的0都出現在所有的1之前,而所有的2都出現在所有的3之前。3.最高位數字不為0。因此,符合我們定義的最小的有趣的數是2013。除此以外,4位的有趣的數還有兩個 2031和2301。請計...

ccf有趣的數

有趣的數 時間限制 1.0s 記憶體限制 256.0mb 問題描述 問題描述 我們把乙個數稱為有趣的,當且僅當 1.它的數字只包含0,1,2,3,且這四個數字都出現過至少一次。2.所有的0都出現在所有的1之前,而所有的2都出現在所有的3之前。3.最高位數字不為0。因此,符合我們定義的最小的有趣的數是...

CCF(有趣的數)

問題描述 試題編號 201312 4 試題名稱 有趣的數 時間限制 1.0s 記憶體限制 256.0mb 問題描述 問題描述 我們把乙個數稱為有趣的,當且僅當 1.它的數字只包含0,1,2,3,且這四個數字都出現過至少一次。2.所有的0都出現在所有的1之前,而所有的2都出現在所有的3之前。3.最高位...