12 個有效提高編程技能的方法

1. 永遠不要停止學習和閱讀閱讀 書籍,而不只是網站閱讀 只為自我提升,而不是為了下一個項目閱讀 提升你的基礎,而不只是最新技術2. 跟比你聰明的人一起工作跟比你更聰明的人或者是更有經驗的人一起工作,可以讓你快速提升3. 變成一個全才不要過於鑽牛角尖,這可能會讓你停滯不前和傷害你的就業前景。4. 閱讀並記錄別人的代碼其實寫代碼比閱讀並理解別人的代碼要容易的多。5. 在實際的項目中擷取編程經驗只有在真實的項目中,各種壓力下、真實善變的客戶、不斷變化的需求下,才能不斷提升你的技能。6.

HDU-1394 Minimum Inversion Number(線段樹)

牛人專題訓練算是會把基本線段樹的操作會了,不過,線段樹操作非常靈活,線段樹只是一個結構,它並沒有存什麼資訊,它主要是節點儲存了區間的資訊。在這個節點中。可以任意添加一些資訊,這要根據不同題目而定了,所以線段樹比樹狀數組適應的範圍更廣,不過在操作上看,樹狀數組比線段樹要簡單的多,而且效率比線段樹要好。所以,如果題目能用樹狀數組就盡量用樹狀數組。這題怎麼說呢,我會寫線段樹,也不會用。不明白啊!現在貼在這裡,要仔細體會。#include<stdio.h>#define M 5555int

poj1151-線段樹與離散化,掃描線

題目串連網上很多人都說這題很經典,值得做一做,可對於剛學線段樹的Acmer似乎有難度,我也不列外,搜了很多人的結題報告,也沒幾個人說清楚,完全不會!只好拿著別人代碼來敲,一步一步理解。畫了一張圖。也讓我知道什麼是離散化,什麼是掃描線。這也就說明了每次掃描相鄰的兩條邊,並計算出y,那麼就需要更新邊。這樣就把矩形分割了。#include<cstdio>#include<iostream>#include<algorithm>using namespace std;

poj-3468 線段樹和樹狀數組的區間更新及求和

題目串連這也算是線段樹入門第一道自己完成的題目。因為在以前,看過別人寫的線段樹區間更新的方法,叫做延遲標記法,意思是:每次更新不需要更新到底部,換句話說:並不需要每個元素一一更新,只有等到下次更新或被詢問的時候才更新!.操作的方法就是用一個輔助數組來記錄(標記)更新的資訊。我們知道線段樹又叫區間樹,它又是平衡二叉樹。線段樹的操作是用遞迴實現的。尋找是二分搜尋故時間複雜度為(logn)。它可以一個數組來表示,看下面這張圖:在用數組存的時候很注意數組的大小。認清楚數組位置中所對應的線段樹的位置是協助

HDU -1754線段樹

一道經典線段樹入門題:query: 區間最大,Update: 單點更新;#include<cstdio>#define M 220000struct node{int l,r;int val;}tree[M*4];inline int max(int a,int b){ //為了提高運行速度,加內建函數,另外,除法用移位代替。 return a>b?a:b; //乘法用加法代替。 } void build(int

HDU-1262素數對

水題一個:先列印素數表,然後去中,往兩邊一次選,就可以了,主意可以認為相同的兩個素之和等於偶數,比如34=17+17。先前沒注意這個WA。#include<stdio.h>#include<math.h>int p[10010]; void get() //列印素數 { p[1]=1; for (int i = 4; i <= 10010; i += 2) { p[i] = 1; } int LIM =

HDU -1261 組合數學。

這題的的公式很好推。先在m個數裡進行全排列。由於有相同的,那麼就要除去每個相同個數的階乘。故有公式:A=(a+b+c+d+........)!/(a! *b! *c! *d!.........)另外這是個大數,需要用到高精度了。#include<stdio.h>int num[250],a[30];int n,len;void solve(int m){int carry,tmp,i,j,k;len=1,num[0]=1;for(i=2;i<=m;i++){

HDU-1431素數迴文

看到素數又想到了素數打表。但這題資料太大,恐怕還沒輸入就逾時了。徹底不知道怎麼辦,看來discussion才知道最大素數迴文。還有些人直接打表,簡直是碉堡了!不過我以向不喜歡這樣的死演算法。好了廢話小說,知道最大的迴文素數(9989899)這樣就好辦了,開個bool型數組還是過的去的,線性打素數表無壓力了。代碼:(220ms)#include<stdio.h>#include<math.h> #define M 9989900bool p[M];

poj1861最小產生樹(並查集)-kruskal演算法

Kruskal演算法是一種按網中邊的權值遞增的順序構造最小產生樹的方法。其基本思想是:設無向連通網為G(V,E),令G的最小產生樹為T,其初態為T=(V,{}),即開始時,最小產生樹T由圖G中的n個點構成,頂點之間沒有一邊,這樣T個邊頂點各自構成一個連通分量。然後,按照邊的權值由小到大的順序,考察G的邊值E中個條邊。若被考察的邊的兩個頂點屬於T的兩個不同連通分量,則將此邊作為最小產生樹的邊加入T中,同時把兩個連通分量連成一個連通分量,若被考察的邊的兩個頂點屬於同一個分量,則捨去次邊,以免造成迴路

10 條“有爭議”的編程觀點

在Stack Overflow上有這樣的一個貼子《What’s your most controversial programming opinion?》,翻譯成中文就是“你認為最有爭議的編程觀點是什嗎?”,不過,在400多個主回貼,以及上千個所有回貼中,好像並不是很有爭議,而是令人相當的茅塞頓開,下面羅列一些,希望對你有協助。1) The only “best practice” you should be using all the time is “Use Your Brain”.唯一的“

zoj-1005倒水問題

題目串連這題初看起來比較難,有點像dp,又有點像bfs。頭暈了!,就是沒想到用類比法,這題真是古怪,我都無語了,大神的代碼竟如此簡單,一個水題都把我難倒了。唉!看來分析問題不過正確,沒尋找到解題的靈感啊。這題,你若聰明就可以大致知道這題解題的思路,樣列,你是這個解題的出發點。我們想想,要保證你輸入的資料有解,我可以可定N<=Cb,接下來b中的水改從何而來呢,你不可能,直接把b倒滿,除非N==Cb,只有用a來實現,先把a裝滿如a>b,把剩餘的Ca-Cb裝入b中,如a<b,此時a=

HDU-2795 Billboard (線段樹)RE的教訓!

題目串連搞了兩天的線段樹,我一直在犯一個錯誤,代碼看似沒錯提交總是RE!,心中的迷惑不解,連續做了幾道題,都這樣,我徹底無語了,搞的我沒心情去涮題了。這題也不列外,提交總是RE,感覺自己數組開的完全沒問題,在網上搜了很久,以為和我寫得差不多的代碼竟可以AC!為何?,我試著把他的代碼改一改,就在我改了全域變數mid後時候。提交終於出問題了。心中迷惑豁然已解!,原來是全域變數mid若的禍!,但我還是不解,為什麼不能這樣!發現在query函數裡有多個嵌套。應該是mid在傳遞過程中,由於定義是全域變數,

poj 2115-擴充歐幾裡得。

題目串連獲得詳細分析:點擊開啟連結貼個代碼:#include<stdio.h>typedef long long LL;LL exgcd(LL a,LL b,LL &x,LL &y){if(b==0){x=1;y=0;return a;}LL d=exgcd(b,a%b,x,y);LL tmp=x;x=y;y=tmp-a/b*y;return d;} int main(){LL

HDU-4633 poyla計數

題目串連具體分析見這個:點擊開啟連結解釋下:  有polya定理:M= 1/G*∑m^c(ði)   G 是置換群的個數。m代表染色數。c(ði)代表每個置換群ði迴圈節的個數       說明:i(1---->G)。根據此題:置換群G=24個。m=k個染色。c(ð1)=8+12+54=74*1,  c(ð2)=(4+4+18)*2*4=26*8,  c(ð3)=(2+3+5)*6=20*6, c(ð4)=38*3+38*6=38*9;

HDU-1041大數運算+遞迴

題目串連題意:電腦的記憶體首先是初始化為1.經過一段時間,變成0 和1。接著分別0變為 10,1又變為01。意思就是(1->0 1)(0->1 0)問經過n步。出現相鄰的兩個零的個數。分析: 此題,很明顯就是找規律,不可能去類比。多畫幾個,就大致可推出方程了。 (1,0)  ,(2,1),(3,1),(4,3),(5,5),(6,11).........(說明:第一個數代表步數,第二個出現兩個零的個數)其遞迴方程為:

HDU-4662 MU puzzle

此題是找規律題,發現規律就不難了。首先,可以肯定字串中只能有一個‘M",而且必定在第一個。先處理 I相當於1,U相當於3.我們發現三個I相當於一個U,而U是由I變來的,把U還原成3個I,I的個數總是2^n個,而三個U相當於一個U,也就意味著在原來的變換中會多出6個I。所以可以推測sum%6==2||sum%6==4,最後剩下2和4,都可以變。考慮MI是原來的字串,所以sum=1也算。代碼:#include<stdio.h>#include<string.h>int

HDU-4602 partition 找規律

分析:看瞭解題報告,先沒看懂,後來恍然大悟。當k>n 顯然是不存在的答案為0;當1<=k=n時,有個很好的技巧,把n拆分n個1,(n=1+1+1.......1),那麼對於整數k,相當於連續取k個1,其它可以任意分開。分兩種情況討論, 取k個連續的點不包含端點。在n個位置區k個連續的點有n-1-k種,在就是把剩餘的n-k-2位置任意分割,相當於n-k-2任意拆分,根據題意提供f(n)=2^n。很快就得到(n-k-1)*2^(n-k-2);如果含有端點,最前和最後,有2種,那麼就有2*

一個遊戲程式員的學習資料

想起寫這篇文章是在看侯傑先生的《深入淺出MFC》時, 突然覺得自己在大學這幾年關於遊戲編程方面還算是有些心得,因此寫出這篇小文,介紹我眼中的遊戲程式 員的書單與原始碼參考。一則是作為自己今後兩年學習目標的備忘錄,二來沒準對別人也有點參考價值。我的原則是唯寫自己研究過或準備研究的資料,所以內容無 疑會帶上強烈的個人喜好色彩, 比如對網路,資料庫等重要方面完全沒有涉及。因為自己主要對三維圖形引擎, 人工智慧演算法, 指令碼系統, 反外掛 (反反外掛?

poj-2914 最小割stoer演算法

這題說是模板題,用stoer演算法可以過,關於這個演算法,網上很多雷同的講解,自己就沒必要再貼一份了(搞不清誰是原著)貼一個模板吧(提交是8000多ms,看牛人將可以達到500多ms,求牛人指點啊)#include<cstdio>#include<iostream>#include<cstring>#define INF 1000000000using namespace std;const int N=505;int graph[N][N];int rec[

HDU-4651 整數分解(產生函數)

題目串連題意:將數字n分解,求p(n)得個數。聽說很多人都在看這個:點擊開啟連結我也不多說了:#include<stdio.h>#define mod 1000000007__int64 f[100005];int w[100005];int main(){int p=1,t,n;w[0]=0;for(int i=1;w[p-1]<=100000;i++){w[p++]=i*(3*i-1)/2;w[p++]=i*(3*i+1)/2;}f[0]=1;for(int

總頁數: 61357 1 .... 19204 19205 19206 19207 19208 .... 61357 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.