【noip模拟赛3】编码
生活随笔
收集整理的這篇文章主要介紹了
【noip模拟赛3】编码
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
描述
?
Alice和Bob之間要進行秘密通信,他們正在討論如何對信息進行加密:
Alice:“不如采用一種很簡單的加密方式:’A’替換成1,’B’替換成2,??,’Z’替換成26。”
Bob:“這種加密方式太傻了,Alice。如果我想要傳送一個單詞’BEAN’給你,它加密后就是25114。但你有很多種不同的方法來解密,從而得到許多單詞!”
Alice:“你說的是沒錯,但是除了’BEAN’有意義以外,其他解密出來的’BEAAD’、
’YAAD’、’YAN’、’YKD’和’BEKD’都沒有任何含義。”
Bob:“是的,但是同一個加密后的數字序列,可能的得到數以億計的不同解密方案?!?/p>
Alice:“是嗎?有這么多嗎?”
你要幫助Bob編寫一個程序,來說服Alice。對于一個加密后的數字序列,告訴她確切的解密方案數。
?
輸入
?
有若干個加密后的數字序列,每行一個,行數不超過10,每行的數字數量不超過10000個。序列一定是符合要求的,例如沒有先導的零和連續兩個零等情況。數字間沒有空格。一行一個零表示輸入結束,這是不需要處理的。
?
輸出
?
對于每個加密后的數字序列,輸出一行。一個整數,表示解密的不同方案數。結果保證在32-bit帶符號整數(longint)范圍內。
?
輸入樣例 1?
25114 1111111111 3333333333 0輸出樣例 1
6 89 1很容易想到用dp做 但是我忽略了0 打好了交上去也全是wa。。
只要在原dp加上!=0即可 #include<cstdio> #include<cstring> #include<string> #include<algorithm> #include<cstring> #include<iostream> using namespace std; //input #define RI(n) scanf("%d",&(n)) #define RII(n,m) scanf("%d%d",&n,&m); #define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k) #define RS(s) scanf("%s",s) #define LL long long #define REP(i,N) for(int i=0;i<(N);i++) #define CLR(A,v) memset(A,v,sizeof A) // #define N 10000+5 char a[N]; int dp[N]; int main() {while(RS(a+1),a[1]-'0'){CLR(dp,0);dp[0]=dp[1]=1;for(int i=2;a[i];i++){if(a[i]-'0'!=0)dp[i]=dp[i-1];if( (a[i-1]-'0')*10+a[i]-'0'<=26&&a[i-1]-'0'!=0 )dp[i]+=dp[i-2];}printf("%d\n",dp[strlen(a+1)]);} }
?
轉載于:https://www.cnblogs.com/bxd123/p/10500342.html
總結
以上是生活随笔為你收集整理的【noip模拟赛3】编码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jmap报错unknown Collec
- 下一篇: 非合作博弈篇——非合作博弈论问题的表示(