剛開始做這題的時候思路錯了, 把他想成字符串模式匹配題了。通過構建長度在[A,B]之間的字符串,然后再對主字符串進行模式匹配,想想要用kmp算法,對于這個我還不是很懂.... 打算好好學習一下kmp,后來估計了一下時間,發現必須超時。 轉而一想: 其實需要的
剛開始做這題的時候思路錯了, 把他想成字符串模式匹配題了。通過構建長度在[A,B]之間的字符串,然后再對主字符串進行模式匹配,想想要用kmp算法,對于這個我還不是很懂.... 打算好好學習一下kmp,后來估計了一下時間,發現必須超時。
轉而一想:
其實需要的只是在主字符串中的一些子集,通過直接遍歷主字符串長度為len(A<=len<=B),把這個數讀出來,相應的+1就好。通過這種思路,寫完代碼。后發現,對于len=2,選項='00'和len=1,選項='0',都會被歸為一類,明顯這樣不符合題意。
怎么解決呢?
可以通過添加前導'1',區別開來。再在輸出的時候忽略前導'1'。
另外用到了排序,將出現頻率分別開來。
輸出的code寫得不是很好;
/* ID:sevenst4 LANG:C++ PROG:contact */ #include#include using namespace std; int cnt[10000]; int cp[10000]; char line[222222]; bool cmp( int a,int b ){ return a>b; }; void print( int num ) { int l=0; int k[15]={0}; while( num ) { k[l++]=num&1; num=num>>1; } for( int i=l-2;i>=0;i-- ) printf( "%d",k[i] ); } int getnum( int s,int e ) { int ret=0; for( int i=s;i
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com