• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆:78 文章:7 評論:38 引用:0
            C++博客 首頁 發新隨筆
            發新文章 聯系 聚合管理

            Given a string s, partition s such that every substring of the partition is a palindrome.

            Return all possible palindrome partitioning of s.

            For example, given s = "aab",
            Return

              [     ["aa","b"],     ["a","a","b"]   ] 
            遞歸求解所有劃分可能~

             1 class Solution {
             2 public:
             3     vector< vector<string> > ans;
             4     
             5     bool IsPalindrome(string s, int start, int end){
             6         if(start==end)
             7             return true;
             8         int i=start, j=end;
             9         while(i<j){
            10             if(s[i]!=s[j])
            11                 return false;
            12             i++;
            13             j--;
            14         }
            15         return true;
            16     }
            17     void recursivePar(string s, int start, vector<string> par){
            18          
            19         if(start == s.length()){
            20             ans.push_back(par);
            21             return ;
            22         }
            23         for(int i=start; i<s.length(); i++){
            24             if(IsPalindrome(s, start, i)){
            25                 par.push_back(s.substr(start, i-start+1));
            26                 recursivePar(s, i+1, par);
            27                 par.pop_back();
            28             }
            29         }
            30             
            31         
            32     }
            33     vector<vector<string>> partition(string s) {
            34         // Start typing your C/C++ solution below
            35         // DO NOT write int main() function
            36         vector<string> par;
            37         par.clear();
            38         ans.clear();
            39         recursivePar(s, 0, par);
            40         return ans;
            41     }
            42 };
            posted @ 2013-03-18 22:19 未央 閱讀(1485) | 評論 (0)編輯 收藏
             
            1. 下載帶mingwin 的安裝版本 http://www.sudupan.com/down_661789.aspx
            2. 進行相關設置 settings-> compilor and debugger...
                1) 最頂區域選擇 GNU GCC Compiler (通常是默認的)
                2) 在第二項中找到Tookchain executables選項,compiler's installation directory, 選擇編譯器的安裝路徑,如C:\ProgramFiles\CodeBlocks\MinGW 
            3. OK了









            posted @ 2012-11-08 08:14 未央 閱讀(326) | 評論 (0)編輯 收藏
             
            轉載自:
            http://hi.baidu.com/jmlover/blog/item/5ba6d53f535ddcc27d1e719c.html

            Firefox 鍵盤快捷鍵
            導航類
            后退: Alt+左方向鍵 或  Backspace
            前進: Shift+Backspace 或  Alt+右方向鍵
            首頁:  Alt+Home
            打開文件: Ctrl+O
            重新載入: F5 或  Ctrl+R
            重新載入 (忽略緩存): Ctrl+F5 或  Ctrl+Shift+R
            停止: Esc

            當前頁
            到頁面底部: End
            到頁面頂部: Home
            移到下一幀: F6  
            移到上一幀: Shift+F6
            頁面源代碼: Ctrl+U
            打?。?nbsp;Ctrl+P
            頁面另存為: Ctrl+S
            放大文字: Ctrl++
            縮小文字: Ctrl+-
            恢復文本大小: Ctrl+0
             
            編輯
            復制: Ctrl+C
            剪切: Ctrl+X
            刪除: Del
            粘貼: Ctrl+V
            重做: Ctrl+Y
            全選: Ctrl+A
            撤消: Ctrl+Z
             
            搜索
            本頁查找: Ctrl+F
            再次查找: F3
            輸入查找鏈接: '
            輸入查找文本: /
            查找: Shift+F3
            網頁搜索: Ctrl+K 或  Ctrl+E
             
            窗口和標簽
            關閉標簽: Ctrl+W 或  Ctrl+F4
            關閉窗口: Ctrl+Shift+W 或  Alt+F4
            向左移動標簽: Ctrl+左方向鍵 或  Ctrl+上方向鍵
            向右移動標簽: Ctrl+右方向鍵 或  Ctrl+下方向鍵
            移動標簽到開頭: Ctrl+Home
            移動標簽到結尾: Ctrl+End
            新建標簽頁: Ctrl+T
            新建窗口: Ctrl+N
            下一個標簽頁: Ctrl+Tab 或  Ctrl+PageDown
            在新標簽頁打開網址: Alt+Enter
            前一個標簽頁: Ctrl+Shift+Tab 或  Ctrl+PageUp
            撤銷關閉標簽頁: Ctrl+Shift+T
            選擇標簽頁 [1 to 8]: Ctrl+[1 到 8]
            選擇最后標簽頁: Ctrl+9
             
            工具
            添加所有為書簽: Ctrl+Shift+D
            添加當前為書簽: Ctrl+D
            打開書簽: Ctrl+B 或  Ctrl+I
            插入瀏覽: F7
            下載: Ctrl+J
            歷史: Ctrl+H
            清除私有數據: Ctrl+Shift+Del
             
            其他
            補全 .com 地址: Ctrl+Enter
            補全 .net 地址: Shift+Enter
            補全 .org 地址: Ctrl+Shift+Enter
            刪除選定的自匹配輸入: Del
            全屏: F11
            選擇地址條: Alt+D 或  F6 或  Ctrl+L
            選擇或管理搜索引擎: Alt+上方向鍵 或  Alt+下方向鍵 或  F4

            Firefox 鼠標快捷鍵

            后退: Shift+Scroll down
            關閉標簽頁: 在標簽上按鼠標中鍵
            減小文字大小:  Ctrl+Scroll up
            前進:  Shift+Scroll up
            增大文字大小:  Ctrl+Scroll down
            新建標簽頁:  在標簽頁欄雙擊鼠標     
            在后臺打開標簽頁:  Ctrl+Left-click 或  點擊鼠標中鍵     
            在前臺打開標簽頁:  Shift+Ctrl+Left-click 或  Shift+點擊鼠標中鍵     
            在新窗口打開: Shift+Left-click
            刷新 (覆蓋緩存): Shift+Reload button     
            保存頁面為:  Alt+Left-click     
            逐行滾動:  Alt+Scroll
            posted @ 2012-07-09 12:05 未央 閱讀(216) | 評論 (0)編輯 收藏
             
            http://download.csdn.net/detail/mobilerit/823506 
            好用
            posted @ 2012-06-10 10:08 未央 閱讀(671) | 評論 (0)編輯 收藏
             
            QSplitter  的函數中有addWidget,但是卻沒有removeWidget, 或者delete之類的功能,所以如果想刪去或者暫時不顯示其中的某些widget就要自己手動完成這個效果。
            方法一:
            取出想刪除的widget,刪除它的指針,QSplitter找不到這個widget的地址,就會自動清除這個widget。
            QWidget *w = new QWidget();
            splitter->addWidget(w);
            QWidget *a = splitter->widget(0);
            delete a;
            a = NULL;
            但是這個方法存在一個問題,刪除指針a,意味著w所指向的地址也被刪除了,如果你想再次把w add到splitter中,就會出現內存訪問沖突之類的錯誤,因為w所指向的widget已經被delete掉了。
            這個方法的好處是真正把一個widget從 splitter里面移除了,而且連帶原本的widget也釋放了。

            方法二:
            QWidget中有一個函數.hide();它相當于把一個widget設為不可見setVisible(false);想要恢復它也很容易,setVisible(true)即可。
            QWidget *w = new QWidget();
            splitter->addWidget(w);
            QWidget *a = splitter->widget(0);
            a.hide();
            這樣就可以達到看上去像刪除了splitter中一個widget的效果。但其實這個widget還在splitter中。如果想讓它再出現,就設置a.setVisible(true);
            此方法不會釋放w,因而適合反復調整splitter中可見widget的功能。
            posted @ 2012-02-10 10:35 未央 閱讀(2805) | 評論 (0)編輯 收藏
             
            轉自: http://hi.baidu.com/yangjinbo/blog/item/02e87209a38066a42eddd4ae.html 

            一直以來總是對這個問題的認識比較朦朧,我相信很多朋友也是這樣的,總是聽到內存一會在棧上分配,一會又在堆上分配,那么它們之間到底是怎么的區別呢?為了說明這個問題,我們先來看一下內存內部的組織情況.

            <!--[if !vml]--><!--[endif]-->

            從上圖可知,程序占用的內存被分了以下幾部分.

            1、棧區(stack

            由編譯器自動分配釋放 ,存放函數的參數值,局部變量的值等,內存的分配是連續的,類似于平時我們所說的棧,如果還不清楚,那么就把它想成數組,它的內存分配是連續分配的,即,所分配的內存是在一塊連續的內存區域內.當我們聲明變量時,那么編譯器會自動接著當前棧區的結尾來分配內存.

            2、堆區(heap

            一般由程序員分配釋放, 若程序員不釋放,程序結束時可能由操作系統回收.類似于鏈表,在內存中的分布不是連續的,它們是不同區域的內存塊通過指針鏈接起來的.一旦某一節點從鏈中斷開,我們要人為的把所斷開的節點從內存中釋放.

            3、全局區(靜態區)(static

            全局變量和靜態變量的存儲是放在一塊的,初始化的全局變量和靜態變量在一塊區域, 未初始化的全局變量和未初始化的靜態變量在相鄰的另一塊區域。 程序結束后由系統釋放

            4、文字常量區

            常量字符串就是放在這里的。 程序結束后由系統釋放

            5、程序代碼區

            存放函數體的二進制代碼。

            先看一個例子.

            char c; //棧上分配
            char *p = new char[3]; //堆上分配,將地址賦給了p;

            在 編譯器遇到第一條指令時,計算其大小,然后去查找當前棧的空間是大于所需分配的空間大小,如果這時棧內空間大于所申請的空間,那么就為其分配內存空間,注 意:在這里,內在空間的分配是連續的,是接著上次分配結束后進行分配的.如果棧內空間小于所申請的空間大小,那么這時系統將揭示棧溢出,并給出相應的異常 信息.

            編譯器遇到第二條指令時,由于p是在棧上分配的,所以在為p分配內在空間時和上面的方法一樣,但當遇到new關 鍵字,那么編譯器都知道,這是用戶申請的動態內存空間,所以就會轉到堆上去為其尋找空間分配.大家注意:堆上的內存空間不是連續的,它是由相應的鏈表將其 空間區時的內在區塊連接的,所以在接到分配內存空間的指定后,它不會馬上為其分配相應的空間,而是先要計算所需空間,然后再到遍列整個堆(即遍列整個鏈的 節點),將第一次遇到的內存塊分配給它.最后再把在堆上分配的字符數組的首地址賦給p.,這個時候,大家已經清楚了,p中現在存放的是在堆中申請的字符數組的首地址,也就是在堆中申請的數組的地址現在被賦給了在棧上申請的指針變量p.為了更加形象的說明問題,請看下圖:

            <!--[if !vml]--><!--[endif]-->

            從上圖可以看出,我們在堆上動態分配的數組的首地址存入了指針p所指向的內容.

            請 注意:在棧上所申請的內存空間,當我們出了變量所在的作用域后,系統會自動我們回收這些空間,而在堆上申請的空間,當出了相應的作用域以后,我們需要顯式 的調用delete來釋放所申請的內存空間,如果我們不及時得對這些空間進行釋放,那么內存中的內存碎片就越來越多,從而我們的實際內存空間也就會變的越 來越少,即,孤立的內存塊越來越多.在這里,我們知道,堆中的內存區域不是連續的,還是將有效的內存區域經過鏈表指針連接起來的,如果我們申請到了某一塊 內存,那么這一塊內存區將會從連續的(通過鏈表連接起來的)內存塊上斷開,如果我們在使用完后,不及時的對它進行釋放,那么它就會孤立的開來,由于沒有任 何指針指向它,所以這個區域將成為內存碎片,所以在使用完動態分配的內存(通過NEW申請)后,一定要顯式的對它進行DELETE刪除.對于這一點,一定 要切記...

            上面給大家陳述了它們之間的概念,對于它們倆的使用比較方面,這里我就不能大家斷續陳述了,對于這個問題,網上一網友的文章中闡述的比較詳細,而且附帶了專業的色彩,下面的文章是部分片斷.

            申請大小的限制

            棧:在Windows,棧是向低地址擴展的數據結構,是一塊連續的內存的區域。這句話的意思是棧頂的地址和棧的最大容量是系統預先規定好的,在WINDOWS下,棧的大小是2M(也有的說是1M,總之是一個編譯時就確定的常數),如果申請的空間超過棧的剩余空間時,將提示overflow。因此,能從棧獲得的空間較小。

            堆:堆是向高地址擴展的數據結構,是不連續的內存區域。這是由于系統是用鏈表來存儲的空閑內存地址的,自然是不連續的,而鏈表的遍歷方向是由低地址向高地址。堆的大小受限于計算機系統中有效的虛擬內存。由此可見,堆獲得的空間比較靈活,也比較大。

            申請效率的比較:

            棧由系統自動分配,速度較快。但程序員是無法控制的。

            堆是由new分配的內存,一般速度比較慢,而且容易產生內存碎片,不過用起來最方便.

            另外,在WINDOWS下,最好的方式是用VirtualAlloc分配內存,他不是在堆,也不是在棧是直接在進程的地址空間中保留一快內存,雖然用起來最不方便。但是速度快,也最靈活。

            堆和棧中的存儲內容

            棧: 在函數調用時,第一個進棧的是主函數中后的下一條指令(函數調用語句的下一條可執行語句)的地址,然后是函數的各個參數,在大多數的C編譯器中,參數是由右往左入棧的,然后是函數中的局部變量。注意靜態變量是不入棧的。

            當本次函數調用結束后,局部變量先出棧,然后是參數,最后棧頂指針指向最開始存的地址,也就是主函數中的下一條指令,程序由該點繼續運行。

            堆:一般是在堆的頭部用一個字節存放堆的大小。堆中的具體內容有程序員安排。

            存取效率的比較

            char s1[] = "aaaaaaaaaaaaaaa";
            char
             *s2 = "bbbbbbbbbbbbbbbbb";

            aaaaaaaaaaa是在運行時刻賦值的;

            bbbbbbbbbbb是在編譯時就確定的;

            但是,在以后的存取中,在棧上的數組比指針所指向的字符串(例如堆)快。

            比如:

            void main()
            {

                char
             a = 1;
                char
             c[] = "1234567890";
                char
             *p ="1234567890";
                a = c[1];
               a = p[1];
                return
            ;
            }

            對應的匯編代碼

            10: a = c[1];

            00401067
             8A 4D F1 mov cl,byte ptr [ebp-0Fh]

            0040106A 88 4D FC mov byte ptr [ebp-4],cl

            11
            : a = p[1];

            0040106D 8B 55 EC mov edx,dword ptr [ebp-14h]

            00401070
             8A 42 01 mov al,byte ptr [edx+1]

            00401073 88 45
             FC mov byte ptr [ebp-4],al

            第一種在讀取時直接就把字符串中的元素讀到寄存器cl中,而第二種則要先把指針值讀到edx中,在根據edx讀取字符,顯然慢了。

            小結:

            堆和棧的區別可以用如下的比喻來看出:

            使用棧就象我們去飯館里吃飯,只管點菜(發出申請)、付錢、和吃(使用),吃飽了就走,不必理會切菜、洗菜等準備工作和洗碗、刷鍋等掃尾工作,他的好處是快捷,但是自由度小。

            使用堆就象是自己動手做喜歡吃的菜肴,比較麻煩,但是比較符合自己的口味,而且自由度


            posted @ 2012-02-03 15:52 未央 閱讀(529) | 評論 (0)編輯 收藏
             
            sprintf(name, "%d", n); 把整數n轉化成字符串,寫到char name[10]里。
            posted @ 2011-12-04 22:36 未央 閱讀(312) | 評論 (1)編輯 收藏
             
            原文鏈接:http://hi.baidu.com/magical/blog/item/d926d0c8d840311b7e3e6fdb.html     
            微軟發布了最新的 Visual Studio 2010 軟件開發編程平臺及 .Net Framework 4 框架。這次 VisualStudio 2010 包括 Professional 專業版、Premium 白金版、Ultimate 旗艦版、Test Professional 測試專業版等版本。       
            Visual Studio 2010
             支持64位Windows,支持多顯示器,以便您可以根據自己的需要來組織和管理工作。您還可以通過可視化設計器來充分發揮您的創造力。無論您的項目簡單 還是復雜,您都可以使用VS2010將您的理 念變成現實!

            提供一枚可供使用的KEY:YCFHQ9DWCYDKV88T2TMHG7BHP

            如果你是在官方下載的試用版,請按照下面的方法升級成正式版,安裝后,進入控制面板的添加刪除程序,點“卸載VS2010”后,在彈出的窗口中有個Update Key的框,輸入注冊碼就OK了。
            也可以使用UltraISO編輯了下 ISO文件,將Setup-->setup.sdb文件提取出來編輯,將
            [Product Key]
            YR3W8FCM2B7BKF9HMQFTCH7WK
            改成
            [Product Key]
            YCFHQ9DWCYDKV88T2TMHG7BHP
            這樣安裝后就是正式版了。

            注意:如果你是使用我下面提供的地址下載的VS2010,那你不需要修改KEY了,直接安裝就是正式版了。

            VS2010中文旗艦(MSDN)版下載地址
            ed2k://|file|cn_visual_studio_2010_ultimate_x86_dvd_532347.iso|2685982720|4AE6228933DDE49D9BFA4C3467C831C2|/

            Visual Assist X 10.6.1823下載地址
            : 
            For Visual Studio 2008/2005/.NET/VC6版本 
            Visual Studio 2010版
            10.6.1823破解補丁

            補丁使用說明
            1、對于VS2008及以前的版本來說,直接用破解補丁覆蓋安裝目錄下的VA_X.DLL文件即可。
            2、VS2010版是以VS2010插件的方式安裝的,插件是一個擴展名為vsix的文件,實質上是一個zip的壓縮包,只需將VA_X_Setup1823.vsix文件名加上zip的擴展名,然后用winrar打開,用補丁包中的va_x.dll替換其中的同名文件,再將擴展名改回vsix安裝即可。

            VS2010插件版卸載說明打開VS2010的菜單,在工具(Tools) - 擴展管理(Extension Manager)中找到插件,點擊卸載。
            posted @ 2011-11-27 16:14 未央 閱讀(1301) | 評論 (0)編輯 收藏
             
            #include<iostream>
            #include
            <io.h>
            using namespace std;
            int main(){
                _finddata_t file;
                
            long lf;
                
            //輸入文件夾路徑
                if((lf = _findfirst("C:\\VisFiles\\Thelayout.Pick3\\*.thelayout"&file))==-1)
                    cout
            <<"Not Found!"<<endl;
                
            else{
                    
            //輸出文件名
                    cout<<"file name list:"<<endl;
                    
            while(_findnext( lf, &file)==0){
                        cout
            <<file.name<<endl;
                    }
                }
                _findclose(lf);
                
            return 0;
            }
            posted @ 2011-11-22 21:54 未央 閱讀(5031) | 評論 (2)編輯 收藏
             
            (1) (a+b)%c = ((a%c)+(b%c))%c; 
            (2) (a*b)%c = ((a%c)*(b%c))%c;
            Proof:
            (1) suppose a=m*c+n, b=s*c+t;
                 (a+b)%c = ((m*c+n)+(s*c+t))%c = ((m+s)*c+(n+t))%c = ((m+s+k)*c+q)%c = q = (k*c+q)%c = (n+t)%c.
                 (a+b)%c = ((m*c+n)+(s*c+t))%c = ((m*c+n)%c+(s*c+t)%c)%c=(n+t)%c.
                 so (a+b)%c = ((a%c)+(b%c))%c;
            (2) suppose a=m*c+n, b=s*c+t;
                 (a*b)%c = ((m*c+n)*(s*c+t))%c = (m*s*c*c+(mt+sn)*c+n*t)%c = ((m*s*c+(mt+sn)+k)*c + q)%c = q = (k*c+q)%c = (n*t)%c.
                 (a*b)%c = ((m*c+n)%c *(s*c+t)%c)%c = (n*t)%c.
                 so (a*b)%c = ((a%c)*(b%c))%c;

            有了上面兩個性質,讓我們來看一道題目。給定一個數n(n<10^100), 求 n%145 (char *n);
            n[0], n[1], n[2] ... n[length-1].
            n=n[0]*10^(length-1) + n[1]*10^(length-2) + ... + n[length-1]. (由于n是字符串,都需要-'0',為了簡便不寫了)。
            在生成n的時候每一步都取余145.
            int ans=0;
            for(int i=0; i<length; i++)
                ans = (ans*10+n[i])%145;
            再來看經典的 快速冪取模 算法:
            a^b%n 
             long long  modExp(long long  a,long long  b,long long  n){
                long long  t,y;
                t = 1; y = a;
                while(b){
                    if(b % 2) t = t * y % n;
                    y = y * y % n;
                    b >>= 1;
                }
                 return t;
            }
            posted @ 2011-08-03 23:14 未央 閱讀(2438) | 評論 (2)編輯 收藏
            僅列出標題
            共8頁: 1 2 3 4 5 6 7 8 
            CALENDER
            <2025年5月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            常用鏈接

            留言簿(6)

            隨筆檔案

            文章檔案

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜


            Powered By: 博客園
            模板提供滬江博客

            久久婷婷五月综合97色直播| 无码人妻久久一区二区三区| 久久综合久久综合亚洲| 狠狠色婷婷久久综合频道日韩 | 久久天天躁狠狠躁夜夜2020老熟妇 | 精品欧美一区二区三区久久久| 欧美性大战久久久久久| 精品人妻久久久久久888| 久久人人超碰精品CAOPOREN| 无码专区久久综合久中文字幕| 精品久久久久久国产三级| 97久久国产综合精品女不卡 | 日本久久中文字幕| 99久久精品国内| 久久精品国产乱子伦| 亚洲国产精品一区二区久久| 亚洲综合精品香蕉久久网| 亚洲第一永久AV网站久久精品男人的天堂AV| 久久精品国产亚洲精品2020| 亚洲国产精品成人久久蜜臀 | 久久香综合精品久久伊人| 国产精品久久新婚兰兰| 久久精品视频91| 久久香蕉综合色一综合色88| 久久久无码精品亚洲日韩蜜臀浪潮| 久久久青草青青国产亚洲免观| 亚洲天堂久久精品| 99久久99久久| 久久亚洲精品成人AV| 亚洲中文精品久久久久久不卡| 久久综合成人网| 日本加勒比久久精品| 久久亚洲国产精品123区| 久久九九久精品国产免费直播| 99久久成人国产精品免费| 大伊人青草狠狠久久| 精品九九久久国内精品| 色综合久久综精品| 久久综合丝袜日本网| 国产成人综合久久精品尤物| 国产亚洲成人久久|