試題編號:
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.最高位...