『壹』 acm競賽知識點
1. acm常用小知識點
acm常用小知識點 1.ACM 關於ACM程序設計競賽,需要掌握哪些知識點,最好能詳細一
訓練過ACM等程序設計競賽的人在演算法上有較大的優勢,這就說明當你編程能力提高之後,主要時間是花在思考演算法上,不是花在寫程序與debug上。
下面給個計劃你練練:第一階段:練經典常用演算法,下面的每個演算法給我打上十到二十遍,同時自己精簡代碼,因為太常用,所以要練到寫時不用想,10-15分鍾內打完,甚至關掉顯示器都可以把程序打出來。1.最短路(Floyd、Dijstra,BellmanFord) 2.最小生成樹(先寫個prim,kruscal要用並查集,不好寫) 3.大數(高精度)加減乘除4.二分查找. (代碼可在五行以內) 5.叉乘、判線段相交、然後寫個凸包. 6.BFS、DFS,同時熟練hash表(要熟,要靈活,代碼要簡) 7.數學上的有:輾轉相除(兩行內),線段交點、多角形面積公式. 8. 調用系統的qsort, 技巧很多,慢慢掌握. 9. 任意進制間的轉換第二階段:練習復雜一點,但也較常用的演算法。
如: 1. 二分圖匹配(匈牙利),最小路徑覆蓋 2. 網路流,最小費用流。 3. 線段樹. 4. 並查集。
5. 熟悉動態規劃的各個典型:LCS、最長遞增子串、三角剖分、記憶化dp 6.博弈類演算法。博弈樹,二進製法等。
7.最大團,最大獨立集。 8.判斷點在多邊形內。
9. 差分約束系統. 10. 雙向廣度搜索、A*演算法,最小耗散優先.第三階段: 前兩個階段是打基礎,第三階段是鍛煉在比賽中可以快速建立模型、想新演算法。這就要平時多做做綜合的題型了。
1. 把oibh上的論文看看(大概幾百篇的,我只看了一點點,呵呵)。 2. 平時掃掃zoj上的難題啦,別老做那些不用想的題.(中大acm的版主經常說我挑簡單的來做:-P ) 3. 多參加網上的比賽,感受一下比賽的氣氛,評估自己的實力. 4. 一道題不要過了就算,問一下人,有更好的演算法也打一下。
5. 做過的題要記好 :-)下面轉自:ACMer必備知識(任重而道遠。)
圖論 路徑問題 0/1邊權最短路徑 BFS 非負邊權最短路徑(Dijkstra) 可以用Dijkstra解決問題的特徵 負邊權最短路徑 Bellman-Ford Bellman-Ford的Yen-氏優化 差分約束系統 Floyd 廣義路徑問題 傳遞閉包 極小極大距離 / 極大極小距離 Euler Path / Tour 圈套圈演算法 混合圖的 Euler Path / Tour Hamilton Path / Tour 特殊圖的Hamilton Path / Tour 構造 生成樹問題 最小生成樹 第k小生成樹 最優比率生成樹 0/1分數規劃 度限制生成樹 連通性問題 強大的DFS演算法 無向圖連通性 割點 割邊 二連通分支 有向圖連通性 強連通分支 2-SAT 最小點基 有向無環圖 拓撲排序 有向無環圖與動態規劃的關系 二分圖匹配問題 一般圖問題與二分圖問題的轉換思路 最大匹配 有向圖的最小路徑覆蓋 0 / 1矩陣的最小覆蓋 完備匹配 最優匹配 穩定婚姻 網路流問題 網路流模型的簡單特徵和與線性規劃的關系 最大流最小割定理 最大流問題 有上下界的最大流問題 循環流 最小費用最大流 / 最大費用最大流 弦圖的性質和判定組合數學 解決組合數學問題時常用的思想 逼近 遞推 / 動態規劃 概率問題 Polya定理計算幾何 / 解析幾何 計算幾何的核心:叉積 / 面積 解析幾何的主力:復數 基本形 點 直線,線段 多邊形 凸多邊形 / 凸包 凸包演算法的引進,卷包裹法 Graham掃描法 水平序的引進,共線凸包的補丁 完美凸包演算法 相關判定 兩直線相交 兩線段相交 點在任意多邊形內的判定 點在凸多邊形內的判定 經典問題 最小外接圓 近似O(n)的最小外接圓演算法 點集直徑 旋轉卡殼,對踵點 多邊形的三角剖分數學 / 數論 最大公約數 Euclid演算法 擴展的Euclid演算法 同餘方程 / 二元一次不定方程 同餘方程組 線性方程組 高斯消元法 解mod 2域上的線性方程組 整系數方程組的精確解法 矩陣 行列式的計算 利用矩陣乘法快速計算遞推關系 分數 分數樹 連分數逼近 數論計算 求N的約數個數 求phi(N) 求約數和 快速數論變換 …… 素數問題 概率判素演算法 概率因子分解數據結構 組織結構 二叉堆 左偏樹 二項樹 勝者樹 跳躍表 樣式圖標 斜堆 reap 統計結構 樹狀數組 虛二叉樹 線段樹 矩形面積並 圓形面積並 關系結構 Hash表 並查集 路徑壓縮思想的應用 STL中的數據結構 vector deque set / map動態規劃 / 記憶化搜索 動態規劃和記憶化搜索在思考方式上的區別 最長子序列系列問題 最長不下降子序列 最長公共子序列 最長公共不下降子序列 一類NP問題的動態規劃解法 樹型動態規劃 背包問題 動態規劃的優化 四邊形不等式 函數的凸凹性 狀態設計 規劃方向線性規劃常用思想 二分 最小表示法串 KMP Trie結構 後綴樹/後綴數組 LCA/RMQ 有限狀態自動機理論排序 選擇/冒泡 快速排序 堆排序 歸並排序 基數排序 拓撲排序 排序網路。
2.ACM需要具備什麼知識
ACM國際大學生程序設計競賽(ACM/ICPC :ACM International Collegiate Programming Contest)是由國際計算機界歷史悠久、頗具權威性的組織ACM( 美國計算機協會)學會(Association for puter Machineary)主辦,是世界上公認的規模最大、水平最高的國際大學生程序設計競賽,其目的旨在使大學生運用計算機來充分展示自已分析問題和解決問題的能力。該項競賽從1970年舉辦至今已歷25屆,因歷屆競賽都薈萃了世界各大洲的精英,雲集了計算機界的「希望之星」,而受到國際各知名大學的重視,並受到全世界各著名計算機公司如Microsoft(微軟公司) 、IBM等的高度關注,成為世界各國大學生最具影響力的國際級計算機類的賽事,ACM所頒發的獲獎證書也為世界各著名計算機公司、各知名大學所認可。
該項競賽是年度性競賽,分區域預賽和國際決賽兩個階段進行,各預賽區第一名自動獲得參加世界決賽的資格,世界決賽安排在每年的3~4月舉行,而區域預賽安排在上一年的9月~12月在各大洲舉行。從1998年開始,IBM公司連續5年獨家贊助該項賽事的世界決賽和區域預賽。這項比賽是以大學為單位組隊(每支隊由教練、3名正式隊員,一名後備隊員組成)參賽,要求在5個小時內,解決5~8到題目。
ACM/ICPC的區域預賽是規模很大,范圍很廣的賽事,近幾年,全世界有1000多所大學, 2000多支參賽隊在六大洲的28~30個賽站中爭奪世界決賽的60~66個名額,去年我校舉辦的區域預賽,就有來自50多所高校的100多支隊伍參加,其激烈程度可想而知。
與其他編程競賽相比,ACM/ICPC題目難度更大,更強調演算法的高效性,不僅要解決一個指定的命題,而且必需要以最佳的方式解決指定的命題;它涉及知識面廣,與大學計算機系本科以及研究生如程序設計、離散數學、數據結構、人工智慧、演算法分析與設計等相關課程直接關聯,對數學要求更高,由於採用英文命題,對英語要求高,ACM/ICPC採用3人合作、共用一台電腦,所以它更強調團隊協作精神;由於許多題目並無現成的演算法,需要具備創新的精神,ACM/ICPC不僅強調學科的基礎,更強調全面素質和能力的培養。ACM/ICPC是一種全封閉式的競賽,能對學生能力進行實時的全面的考察,其成績的真實性更強,所以目前已成為內地高校的一個熱點,是培養全面發展優秀人材的一項重要的活動。概括來說就是:強調演算法的高效性、知識面要廣、對數學和英語要求較高、團隊協作和創新精神。
3.ACM需要那些方面的知識
一、語言是最重要的基本功 無論側重於什麼方面,只要是通過計算機程序去最終實現的競賽,語言都是大家要 過的第一道關。
亞洲賽區的比賽支持的語言包括C/C++與JAVA。筆者首先說說JAVA,眾所 周知,作為面向對象的王牌語言,JAVA在大型工程的組織與安全性方面有著自己獨特的 優勢,但是對於信息學比賽的具體場合,JAVA則顯得不那麼合適,它對於輸入輸出流的 操作相比於C++要繁雜很多,更為重要的是JAVA程序的運行速度要比C++慢10倍以上,而 競賽中對於JAVA程序的運行時限卻往往得不到同等比例的放寬,這無疑對演算法設計提出 了更高的要求,是相當不利的。
其實,筆者並不主張大家在這種場合過多地運用面向對 象的程序設計思維,因為對於小程序來說這不旦需要花費更多的時間去編寫代碼,也會 降低程序的執行效率。 接著說C和C++。
許多現在參加講座的同學還在上大一,C的基礎知識剛剛學完,還沒 有接觸過C++,其實在賽場上使用純C的選手還是大有人在的,它們主要是看重了純C在效 率上的優勢,所以這部分同學如果時間有限,並不需要急著去學習新的語言,只要提高 了自己在演算法設計上的造詣,純C一樣能發揮巨大的威力。 而C++相對於C,在輸入輸出流上的封裝大大方便了我們的操作,同時降低了出錯的 可能性,並且能夠很好地實現標准流與文件流的切換,方便了調試的工作。
如果有些同 學比較在意這點,可以嘗試C和C++的混編,畢竟僅僅學習C++的流操作還是不花什麼時間 的。 C++的另一個支持來源於標准模版庫(STL),庫中提供的對於基本數據結構的統一 介面操作和基本演算法的實現可以縮減我們編寫代碼的長度,這可以節省一些時間。
但是 ,與此相對的,使用STL要在效率上做出一些犧牲,對於輸入規模很大的題目,有時候必 須放棄STL,這意味著我們不能存在「有了STL就可以不去管基本演算法的實現」的想法; 另外,熟練和恰當地使用STL必須經過一定時間的積累,准確地了解各種操作的時間復雜 度,切忌對STL中不熟悉的部分濫用,因為這其中蘊涵著許多初學者不易發現的陷阱。 通過以上的分析,我們可以看出僅就信息學競賽而言,對語言的掌握並不要求十分 全面,但是對於經常用到的部分,必須十分熟練,不允許有半點不清楚的地方,下面我 舉個真實的例子來說明這個道理——即使是一點很細微的語言障礙,都有可能釀成錯誤 : 在去年清華的賽區上,有一個隊在做F題的時候使用了cout和printf的混合輸出,由 於一個帶緩沖一個不帶,所以輸出一長就混亂了。
只是因為當時judge team中負責F題的 人眼睛尖,看出答案沒錯只是順序不對(答案有一頁多,是所有題目中最長的一個輸出 ),又看了看程序發現只是輸出問題就給了個Presentation error(格式錯)。如果審 題的人不是這樣而是直接給一個 Wrong Answer,相信這個隊是很難查到自己錯在什麼地 方的。
現在我們轉入第二個方面的討論,基礎學科知識的積累。 二、以數學為主的基礎知識十分重要 雖然被定性為程序設計競賽,但是參賽選手所遇到的問題更多的是沒有解決問題的 思路,而不是有了思路卻死活不能實現,這就是平時積累的基礎知識不夠。
今年World Final的總冠軍是波蘭華沙大學,其成員出自於數學系而非計算機系,這就是一個鮮活的 例子。競賽中對於基礎學科的涉及主要集中於數學,此外對於物理、電路等等也可能有 一定應用,但是不多。
因此,大一的同學也不必為自己還沒學數據結構而感到不知從何 入手提高,把數學撿起來吧!下面我來談談在競賽中應用的數學的主要分支。 1、離散數學——作為計算機學科的基礎,離散數學是競賽中涉及最多的數學分支, 其重中之重又在於圖論和組合數學,尤其是圖論。
圖論之所以運用最多是因為它的變化最多,而且可以輕易地結合基本數據結構和許 多演算法的基本思想,較多用到的知識包括連通性判斷、DFS和BFS,關節點和關鍵路徑、歐拉迴路、最小生成樹、最短路徑、二部圖匹配和網路流等等。雖然這部分的比重很大 ,但是往往也是競賽中的難題所在,如果有初學者對於這部分的某些具體內容暫時感到 力不從心,也不必著急,可以慢慢積累。
競賽中設計的組合計數問題大都需要用組合數學來解決,組合數學中的知識相比於 圖論要簡單一些,很多知識對於小學上過奧校的同學來說已經十分熟悉,但是也有一些 部分需要先對代數結構中的群論有初步了解才能進行學習。組合數學在競賽中很少以難 題的形式出現,但是如果積累不夠,任何一道這方面的題目卻都有可能成為難題。
2、數論——以素數判斷和同餘為模型構造出來的題目往往需要較多的數論知識來解 決,這部分在競賽中的比重並不大,但只要來上一道,也足以使知識不足的人冥思苦想 上一陣時間。素數判斷和同餘最常見的是在以密碼學為背景的題目中出現,在運用密碼 學常識確定大概的過程之後,核心演算法往往要涉及數論的內容。
3、計算幾何——計算幾何相比於其它部分來說是比較獨立的,就是說它和其它的知 識點很少有過多的結合,較常用到的部分包括——線段相交的判斷、多邊形面積的計算 、內點外點的判斷、凸包等。
4.ACM需要那些方面的知識
一、語言是最重要的基本功 無論側重於什麼方面,只要是通過計算機程序去最終實現的競賽,語言都是大家要 過的第一道關。
亞洲賽區的比賽支持的語言包括C/C++與JAVA。筆者首先說說JAVA,眾所 周知,作為面向對象的王牌語言,JAVA在大型工程的組織與安全性方面有著自己獨特的 優勢,但是對於信息學比賽的具體場合,JAVA則顯得不那麼合適,它對於輸入輸出流的 操作相比於C++要繁雜很多,更為重要的是JAVA程序的運行速度要比C++慢10倍以上,而 競賽中對於JAVA程序的運行時限卻往往得不到同等比例的放寬,這無疑對演算法設計提出 了更高的要求,是相當不利的。
其實,筆者並不主張大家在這種場合過多地運用面向對 象的程序設計思維,因為對於小程序來說這不旦需要花費更多的時間去編寫代碼,也會 降低程序的執行效率。 接著說C和C++。
許多現在參加講座的同學還在上大一,C的基礎知識剛剛學完,還沒 有接觸過C++,其實在賽場上使用純C的選手還是大有人在的,它們主要是看重了純C在效 率上的優勢,所以這部分同學如果時間有限,並不需要急著去學習新的語言,只要提高 了自己在演算法設計上的造詣,純C一樣能發揮巨大的威力。 而C++相對於C,在輸入輸出流上的封裝大大方便了我們的操作,同時降低了出錯的 可能性,並且能夠很好地實現標准流與文件流的切換,方便了調試的工作。
如果有些同 學比較在意這點,可以嘗試C和C++的混編,畢竟僅僅學習C++的流操作還是不花什麼時間 的。 C++的另一個支持來源於標准模版庫(STL),庫中提供的對於基本數據結構的統一 介面操作和基本演算法的實現可以縮減我們編寫代碼的長度,這可以節省一些時間。
但是 ,與此相對的,使用STL要在效率上做出一些犧牲,對於輸入規模很大的題目,有時候必 須放棄STL,這意味著我們不能存在「有了STL就可以不去管基本演算法的實現」的想法; 另外,熟練和恰當地使用STL必須經過一定時間的積累,准確地了解各種操作的時間復雜 度,切忌對STL中不熟悉的部分濫用,因為這其中蘊涵著許多初學者不易發現的陷阱。 通過以上的分析,我們可以看出僅就信息學競賽而言,對語言的掌握並不要求十分 全面,但是對於經常用到的部分,必須十分熟練,不允許有半點不清楚的地方,下面我 舉個真實的例子來說明這個道理——即使是一點很細微的語言障礙,都有可能釀成錯誤 : 在去年清華的賽區上,有一個隊在做F題的時候使用了cout和printf的混合輸出,由 於一個帶緩沖一個不帶,所以輸出一長就混亂了。
只是因為當時judge team中負責F題的 人眼睛尖,看出答案沒錯只是順序不對(答案有一頁多,是所有題目中最長的一個輸出 ),又看了看程序發現只是輸出問題就給了個Presentation error(格式錯)。如果審 題的人不是這樣而是直接給一個 Wrong Answer,相信這個隊是很難查到自己錯在什麼地 方的。
現在我們轉入第二個方面的討論,基礎學科知識的積累。 二、以數學為主的基礎知識十分重要 雖然被定性為程序設計競賽,但是參賽選手所遇到的問題更多的是沒有解決問題的 思路,而不是有了思路卻死活不能實現,這就是平時積累的基礎知識不夠。
今年World Final的總冠軍是波蘭華沙大學,其成員出自於數學系而非計算機系,這就是一個鮮活的 例子。競賽中對於基礎學科的涉及主要集中於數學,此外對於物理、電路等等也可能有 一定應用,但是不多。
因此,大一的同學也不必為自己還沒學數據結構而感到不知從何 入手提高,把數學撿起來吧!下面我來談談在競賽中應用的數學的主要分支。 1、離散數學——作為計算機學科的基礎,離散數學是競賽中涉及最多的數學分支, 其重中之重又在於圖論和組合數學,尤其是圖論。
圖論之所以運用最多是因為它的變化最多,而且可以輕易地結合基本數據結構和許 多演算法的基本思想,較多用到的知識包括連通性判斷、DFS和BFS,關節點和關鍵路徑、歐拉迴路、最小生成樹、最短路徑、二部圖匹配和網路流等等。雖然這部分的比重很大 ,但是往往也是競賽中的難題所在,如果有初學者對於這部分的某些具體內容暫時感到 力不從心,也不必著急,可以慢慢積累。
競賽中設計的組合計數問題大都需要用組合數學來解決,組合數學中的知識相比於 圖論要簡單一些,很多知識對於小學上過奧校的同學來說已經十分熟悉,但是也有一些 部分需要先對代數結構中的群論有初步了解才能進行學習。組合數學在競賽中很少以難 題的形式出現,但是如果積累不夠,任何一道這方面的題目卻都有可能成為難題。
2、數論——以素數判斷和同餘為模型構造出來的題目往往需要較多的數論知識來解 決,這部分在競賽中的比重並不大,但只要來上一道,也足以使知識不足的人冥思苦想 上一陣時間。素數判斷和同餘最常見的是在以密碼學為背景的題目中出現,在運用密碼 學常識確定大概的過程之後,核心演算法往往要涉及數論的內容。
3、計算幾何——計算幾何相比於其它部分來說是比較獨立的,就是說它和其它的知 識點很少有過多的結合,較常用到的部分包括——線段相交的判斷、多邊形面積的計算 、內點外點的判斷、凸包等。
5.ACM需要具備什麼知識
ACM國際大學生程序設計競賽(ACM/ICPC :ACM International Collegiate Programming Contest)是由國際計算機界歷史悠久、頗具權威性的組織ACM( 美國計算機協會)學會(Association for puter Machineary)主辦,是世界上公認的規模最大、水平最高的國際大學生程序設計競賽,其目的旨在使大學生運用計算機來充分展示自已分析問題和解決問題的能力。該項競賽從1970年舉辦至今已歷25屆,因歷屆競賽都薈萃了世界各大洲的精英,雲集了計算機界的「希望之星」,而受到國際各知名大學的重視,並受到全世界各著名計算機公司如Microsoft(微軟公司) 、IBM等的高度關注,成為世界各國大學生最具影響力的國際級計算機類的賽事,ACM所頒發的獲獎證書也為世界各著名計算機公司、各知名大學所認可。
該項競賽是年度性競賽,分區域預賽和國際決賽兩個階段進行,各預賽區第一名自動獲得參加世界決賽的資格,世界決賽安排在每年的3~4月舉行,而區域預賽安排在上一年的9月~12月在各大洲舉行。從1998年開始,IBM公司連續5年獨家贊助該項賽事的世界決賽和區域預賽。這項比賽是以大學為單位組隊(每支隊由教練、3名正式隊員,一名後備隊員組成)參賽,要求在5個小時內,解決5~8到題目。
ACM/ICPC的區域預賽是規模很大,范圍很廣的賽事,近幾年,全世界有1000多所大學, 2000多支參賽隊在六大洲的28~30個賽站中爭奪世界決賽的60~66個名額,去年我校舉辦的區域預賽,就有來自50多所高校的100多支隊伍參加,其激烈程度可想而知。
與其他編程競賽相比,ACM/ICPC題目難度更大,更強調演算法的高效性,不僅要解決一個指定的命題,而且必需要以最佳的方式解決指定的命題;它涉及知識面廣,與大學計算機系本科以及研究生如程序設計、離散數學、數據結構、人工智慧、演算法分析與設計等相關課程直接關聯,對數學要求更高,由於採用英文命題,對英語要求高,ACM/ICPC採用3人合作、共用一台電腦,所以它更強調團隊協作精神;由於許多題目並無現成的演算法,需要具備創新的精神,ACM/ICPC不僅強調學科的基礎,更強調全面素質和能力的培養。ACM/ICPC是一種全封閉式的競賽,能對學生能力進行實時的全面的考察,其成績的真實性更強,所以目前已成為內地高校的一個熱點,是培養全面發展優秀人材的一項重要的活動。概括來說就是:強調演算法的高效性、知識面要廣、對數學和英語要求較高、團隊協作和創新精神。
6.ACM常用的經典演算法
大概分為數論演算法,圖論演算法,A*演算法。
數論演算法:
排序(選擇,冒泡,快速,歸並,堆,基數,桶排序等)
遞歸,回溯
概率,隨機
公約數,素數
因數分解
矩陣運算
線性規劃
最小二乘
微積分
多項式分解和級數
圖論演算法:
哈夫曼樹(即最優二叉樹)
哈希表
Prim,Kruskal演算法(即最小生成樹演算法)
紅黑樹
a-B剪枝法
深、廣度搜索
拓撲排序
強連通分量
Dijkstra,Bellman-Ford,Floyd-Warashall演算法(最短路徑演算法)
計算幾何(線段相交,凸包,最近點對)
A*演算法:
動態規劃
貪心演算法
KMP演算法
哈密頓迴路問題
子集問題
博弈(極大極小值演算法等)
7.參加ACM需要准備哪些知識
學ACM要熟練C語言的基礎語法,對編程有很大的興趣,還要學關於數據結構的知識。
內容大多數是考數據結構,例如:深度搜索(dfs)、廣度搜索(bfs)、並查集、母函數、最小生成樹、數論、動態規劃(重點)、背包問題、最短路、網路流……還有很多演算法,我列出這些是經常考到的,我也在學習上述所說的。 最好買一本《數據結構》或者關於演算法的書看看,看完一些要自己動手實踐做題,做題的話去杭電acm做題,裡面有很多很基礎的題,不錯的。
資料的話,網路有很多,我多數都是網路或者 *** ,還有可以看看別人的博客的解題報告,裡面有詳細的介紹,不懂還可以問問同學師兄的。 對了,還有一點,acm比賽都是英文題目的,比賽時帶本字典查吧。
希望我說的你能滿意,祝你能在acm方面有所收獲。
『貳』 聽說美國有個AMC編程大賽的組織,關於這個的知識,誰知道啊給我分享一下啊
ACM國際大學生程序設計競賽(ACM International Collegiate Programming Contest – ACM-ICPC)由國際計算機學界著名的ACM學會(Association for Computer Machinery)主辦,是世界上規模最大、水平最高的國際大學生程序競賽。每年舉辦一次。ACM成立於計算機誕生次年,是目前計算機學界中歷史最悠久、最具權威性的組織。
ACM國際性大學生程序設計競賽自1970年開始,其宗旨是使大學生能通過計算機充分展示自己分析問題和解決問題的能力。參加本項比賽的選手至少需要掌握計算機科學的常用演算法,基本的計算理論,(如:離散數學,具體數學,組合數學基礎),數據結構基礎,程序設計語言(規定是C/C++或者是Java)。在本項比賽中考察學生的不僅僅是能夠完成指定任務的程序,更要求在完成程序的功能的基礎之上提高程序的運行效率與空間佔用率。我在浙江大學ACM在線測試組參加測試的最深體會就是你時時刻刻都應當去考慮如何去最大限度的優化,改善你的程序結構,已達到用最小的空間,最優的演算法實現程序的功能。從數學角度考慮,題目主要的方向集中在工程數學,抽象數學很少涉及。一般題目都會給出要求和幾組輸入和輸出作為程序設計的參考,也是檢驗程序正確性的標准之一。
整個競賽分為地區預賽(Regional Contest)和決賽(Final Contest)兩個階段進行。今年(2003)在中國大陸地區舉行的ACM-ICPC區賽共有兩個賽區,分別由北京清華大學和廣州中山大學承辦。我們學校的計算機學院從去年起開始組織學生參加世界上最具權威性的大學生程序設計競賽,取得了較好的成績,我們學院在明年也要有組織的參加這項國際性的大賽,希望有志於此的同學加入我們的行列。我們會定期的舉辦相關的講座以使同學們對ACM-ICPC比賽有更多地了解。鑒於我院學生對這項比賽了解的實際情況,下面我就從浙江大學的在線題庫中選擇了Volume I當中的第一個題目向大家展示一下這項比賽的特點。
Calculate a + b
Input
The input will consist of a series of pairs of integers a and b,separated by a space, one pair of integers per line.
Output
For each pair of input integers a and b you should output the sum of a and b in one line,and with one line of output for each line in input.
Sample Input
1 5
Sample Output
6
Hint
Use + operator
如果選用的程序設計語言是 C++:
#include
int main()
{
int a,b;
while(cin >> a >> b)
cout << a+b << endl;
}
如果選用的程序設計語言是C:
#include
int main()
{
int a,b;
while(scanf("%d %d",&a, &b) != EOF)
printf("%d\n",a+b);
}
如果選用的程序設計語言是PASCAL
program p1001(Input,Output);
var
a,b:Integer;
begin
while not eof(Input) do
begin
Readln(a,b);
Writeln(a+b);
end;
end.
程序的功能中文描述是這樣的:在一行輸入兩個整型數,換行輸出結果,循環執行,直到用戶中止。
三個程序代碼都擺出來了,雖然這個程序極其簡單,但是可以說明很多語言的特點以及程序設計的思想,大家可以清楚地看到與一般的思路最大不同點就是沒有使用循環語句for,而是選擇while,結合程序設計語言自身的特點,從而大大的減少了代碼量,而且不易出錯。下面我把這個程序關鍵點的原理闡述一下:
針對題目的要求,要保證無數次輸入下程序的健壯性,而while語句這點的優勢就是及其突出的,此種情況下,我們通常採用在while循環結構的首部使用流讀取運算符輸入一系列值。當遇到文件結束符或者是非法輸入時運算符返回0(false)這種結構非常適合事先並不知道有多少組輸入時,那麼下面我們在著重說一下cin在這里的用法.
上面的C++演算法描述中,程序的跳出我們採用輸入非法字元,一旦輸入非法字元,則返回值為0(false)則,while循環結束,也就是輸入輸出流當中初學者不太常使用的流錯誤。
下面我們做一個簡單的介紹:
對於輸入輸出流的狀態,我們可以用類ios中的位測試流的狀態。類ios是輸入/輸出類istream,ostream和iostream的基類。當遇到文件結束符時,輸入流中自動設置eofbit.可以在程序中使用成員函數eof確定是否已經到達文件尾。如果cin遇到了文件的結束符,那麼函數調用:
cin.eof()
返回true,否則返回false
當流中發生格式錯誤的時候,雖然會設置failbit,但是字元並未丟失。成員函數fail判斷流操作是否失敗,這種錯誤通常可恢復。
當發生導致數據丟失的錯誤時,設置badbit.成員函數bad判斷流操作是否失敗,這種嚴重錯誤通常不可恢復。
如果eofbit,failbit,badbit都沒有設置,則設置goodbit
如果函數eo,fail,bad都沒有設置,則成員函數good返回true.成員函數中應當只對合法流進行I/O操作。
下面是為說明問題專門寫的一個測試代碼,
#include
int main()
{
int a;
cin << a;
cout >>cin.eof();
cout >>cin.fail();
cout >>cin.bad();
cout >>cin.good();
}
大家可以試一試,分別輸入合法的整型數和非法的字元型數,比較結果就能夠比較好的領會這部分內容了。另外兩種語言的原理很容易看懂,就不傲述了,總之就想通過這個問題說明:問題看似簡單,實則包含著很多內容,再簡單的程序我們都要結合語言的自身特點,以一種最優化的結構去表達他, 不要忽視任何的小問題。
『叄』 演算法設計比賽做什麼演算法好
應該是ACM吧
就是給你8-10道演算法題目,5個小時,做出來多的題目數越多,排名越靠前,如果題目數一樣多的看用的時間。
時間的計算方法如下:
例如你A題用了20分鍾AC,然後B題有用了30分鍾AC(此時是比賽開始50分鍾),又用了30分鍾AC了C題,那麼你的時間(penalty )是
20 + 50 + 80 = 150分鍾
比賽中常用的演算法有
1。動態規劃
2。搜索
3。貪心
4。圖論
5。組合數學
6。計算幾何
7。數論
等
推薦到
http://acm.pku.e.cn
http://acm.zju.e.cn
http://acm.h.e.cn
http://acm.timus.ru
這幾個OJ上練習
比較好的題目分類(POJ上的)
1。這個是我最喜歡的
初期:
一.基本演算法:
(1)枚舉. (poj1753,poj2965)(2008-10-27Done 位運算+寬搜)
(2)貪心(poj1328,poj2109,poj2586)
(3)遞歸和分治法.
(4)遞推.
(5)構造法.(poj3295)
(6)模擬法.(poj1068,poj2632,poj1573,poj2993,poj2996)
二.圖演算法:
(1)圖的深度優先遍歷和廣度優先遍歷.
(2)最短路徑演算法(dijkstra,bellman-ford,floyd,heap+dijkstra)(2008-08-29Done)
(poj1860,poj3259,poj1062,poj2253,poj1125,poj2240)
(3)最小生成樹演算法(prim,kruskal)
(poj1789,poj2485,poj1258,poj3026)
(4)拓撲排序 (poj1094)(2008-09-01Done)
(5)二分圖的最大匹配 (匈牙利演算法) (poj3041,poj3020)
(6)最大流的增廣路演算法(KM演算法). (poj1459,poj3436)
三.數據結構.
(1)串 (poj1035,poj3080,poj1936)
(2)排序(快排、歸並排(與逆序數有關)、堆排) (poj2388,poj2299)
(3)簡單並查集的應用.
(4)哈希表和二分查找等高效查找法(數的Hash,串的Hash)
(poj3349,poj3274,POJ2151,poj1840,poj2002,poj2503)
(5)哈夫曼樹(poj3253)(2008-09-02Done)
(6)堆
(7)trie樹(靜態建樹、動態建樹) (poj2513)(2008-10-23Done 並查集、歐拉)
四.簡單搜索
(1)深度優先搜索 (poj2488,poj3083,poj3009,poj1321,poj2251)
(2)廣度優先搜索(poj3278,poj1426,poj3126,poj3087.poj3414)
(3)簡單搜索技巧和剪枝(poj2531,poj1416,poj2676,1129)
五.動態規劃
(1)背包問題. (poj1837,poj1276)
(2)型如下表的簡單DP(可參考lrj的書 page149):
1.E[j]=opt{D+w(i,j)} (poj3267,poj1836,poj1260,poj2533)
2.E[i,j]=opt{D[i-1,j]+xi,D[i,j-1]+yj,D[i-1][j-1]+zij} (最長公共子序列)
(poj3176,poj1080,poj1159)
3.C[i,j]=w[i,j]+opt{C[i,k-1]+C[k,j]}.(最優二分檢索樹問題)
六.數學
(1)組合數學:
1.加法原理和乘法原理.
2.排列組合.
3.遞推關系.
(POJ3252,poj1850,poj1019,poj1942)
(2)數論.
1.素數與整除問題
2.進制位.
3.同餘模運算.
(poj2635, poj3292,poj1845,poj2115)
(3)計算方法.
1.二分法求解單調函數相關知識.(poj3273,poj3258,poj1905,poj3122)
七.計算幾何學.
(1)幾何公式.
(2)叉積和點積的運用(如線段相交的判定,點到線段的距離等). (poj2031,poj1039)
(3)多邊型的簡單演算法(求面積)和相關判定(點在多邊型內,多邊型是否相交)
(poj1408,poj1584)
(4)凸包. (poj2187,poj1113)(2008-08-29Done)
中級:
一.基本演算法:
(1)C++的標准模版庫的應用. (poj3096,poj3007)
(2)較為復雜的模擬題的訓練(poj3393,poj1472,poj3371,poj1027,poj2706)
二.圖演算法:
(1)差分約束系統的建立和求解. (poj1201,poj2983)(2008-09-05Done)
(2)最小費用最大流(poj2516,poj2516,poj2195)
(3)雙連通分量(poj2942)
(4)強連通分支及其縮點.(poj2186)
(5)圖的割邊和割點(poj3352)
(6)最小割模型、網路流規約(poj3308, )
三.數據結構.
(1)線段樹. (poj2528,poj2828,poj2777,poj2886,poj2750)
(2)靜態二叉檢索樹. (poj2482,poj2352)
(3)樹狀樹組(poj1195,poj3321)
(4)RMQ. (poj3264,poj3368)
(5)並查集的高級應用. (poj1703,2492)
(6)KMP演算法. (poj1961,poj2406)(2008-09-16Done)
四.搜索
(1)最優化剪枝和可行性剪枝
(2)搜索的技巧和優化 (poj3411,poj1724)
(3)記憶化搜索(poj3373,poj1691)
五.動態規劃
(1)較為復雜的動態規劃(如動態規劃解特別的施行商問題等)
(poj1191,poj1054,poj3280,poj2029,poj2948,poj1925,poj3034)
(2)記錄狀態的動態規劃. (POJ3254,poj2411,poj1185)
(3)樹型動態規劃(poj2057,poj1947,poj2486,poj3140)
六.數學
(1)組合數學:
1.容斥原理.
2.抽屜原理.
3.置換群與Polya定理(poj1286,poj2409,poj3270,poj1026).
4.遞推關系和母函數.
(2)數學.
1.高斯消元法(poj2947,poj1487, poj2065,poj1166,poj1222)
2.概率問題. (poj3071,poj3440)
3.GCD、擴展的歐幾里德(中國剩餘定理) (poj3101)
(3)計算方法.
1.0/1分數規劃. (poj2976)
2.三分法求解單峰(單谷)的極值.
3.矩陣法(poj3150,poj3422,poj3070)
4.迭代逼近(poj3301)
(4)隨機化演算法(poj3318,poj2454)
(5)雜題.
(poj1870,poj3296,poj3286,poj1095)
七.計算幾何學.
(1)坐標離散化.
(2)掃描線演算法(例如求矩形的面積和周長並,常和線段樹或堆一起使用).
(poj1765,poj1177,poj1151,poj3277,poj2280,poj3004)
(3)多邊形的內核(半平面交)(poj3130,poj3335)
(4)幾何工具的綜合應用.(poj1819,poj1066,poj2043,poj3227,poj2165,poj3429)
高級:
一.基本演算法要求:
(1)代碼快速寫成,精簡但不失風格
(poj2525,poj1684,poj1421,poj1048,poj2050,poj3306)
(2)保證正確性和高效性. poj3434
二.圖演算法:
(1)度限制最小生成樹和第K最短路. (poj1639)
(2)最短路,最小生成樹,二分圖,最大流問題的相關理論(主要是模型建立和求解)
(poj3155, poj2112,poj1966,poj3281,poj1087,poj2289,poj3216,poj2446
(3)最優比率生成樹. (poj2728)
(4)最小樹形圖(poj3164)
(5)次小生成樹.
(6)無向圖、有向圖的最小環
三.數據結構.
(1)trie圖的建立和應用. (poj2778)(2008-10-26Done 矩陣A^n)
(2)LCA和RMQ問題(LCA(最近公共祖先問題) 有離線演算法(並查集+dfs) 和 在線演算法
(RMQ+dfs)).(poj1330)
(3)雙端隊列和它的應用(維護一個單調的隊列,常常在動態規劃中起到優化狀態轉移的
目的). (poj2823)
(4)左偏樹(可合並堆).
(5)後綴樹(非常有用的數據結構,也是賽區考題的熱點).
(poj3415,poj3294)
四.搜索
(1)較麻煩的搜索題目訓練(poj1069,poj3322,poj1475,poj1924,poj2049,poj3426)
(2)廣搜的狀態優化:利用M進制數存儲狀態、轉化為串用hash表判重、按位壓縮存儲狀態、雙向廣搜、A*演算法. (poj1768,poj1184,poj1872,poj1324,poj2046,poj1482)
(3)深搜的優化:盡量用位運算、一定要加剪枝、函數參數盡可能少、層數不易過大、可以考慮雙向搜索或者是輪換搜索、IDA*演算法. (poj3131,poj2870,poj2286)
五.動態規劃
(1)需要用數據結構優化的動態規劃.
(poj2754,poj3378,poj3017)
(2)四邊形不等式理論.
(3)較難的狀態DP(poj3133)
六.數學
(1)組合數學.
1.MoBius反演(poj2888,poj2154)
2.偏序關系理論.
(2)博奕論.
1.極大極小過程(poj3317,poj1085)
2.Nim問題.
七.計算幾何學.
(1)半平面求交(poj3384,poj2540)
(2)可視圖的建立(poj2966)
(3)點集最小圓覆蓋.
(4)對踵點(poj2079)
八.綜合題.
(poj3109,poj1478,poj1462,poj2729,poj2048,poj3336,poj3315,poj2148,poj1263)
2。這個每個分類的題目比較多,適合作為第一個分類的擴展
說明:遞推算動歸, 離散化算數據結構, 並查集算數據結構, 博弈算動歸, 麻煩題一般都是不錯的綜合題, 最短路算圖論,數據的有序化算排序
麻煩題:1697, 1712, 1713, 1720, 1729, 1765, 1772, 1858, 1872, 1960, 1963, 2050, 2122, 2162, 2219, 2237,
簡單題目:1000, 1003, 1004, 1005, 1007, 1046, 1207, 1226, 1401, 1504, 1552, 1607, 1657, 1658, 1674, 1799, 1862, 1906, 1922, 1929, 1931, 1969, 1976, 2000, 2005, 2017, 2027, 2070, 2101, 2105, 2109, 2116, 2136, 2160, 2190, 2232, 2234, 2275, 2301, 2350, 2363, 2389, 2393, 2413, 2419, 推薦:1063, 1064, 1131, 1140, 1715, 2163,
雜題:1014, 1218, 1316, 1455, 1517, 1547, 1580, 1604, 1663, 1678, 1749, 1804, 2013, 2014, 2056, 2059, 2100, 2188, 2189, 2218, 2229, 2249, 2290, 2302, 2304, 2309, 2313, 2316, 2323, 2326, 2368, 2369, 2371, 2402, 2405, 2407, 推薦:1146, 1147, 1148, 1171, 1389, 1433, 1468, 1519, 1631, 1646, 1672, 1681, 1700, 1701, 1705, 1728, 1735, 1736, 1752, 1754, 1755, 1769, 1781, 1787, 1796, 1797, 1833, 1844, 1882, 1933, 1941, 1978, 2128, 2166, 2328, 2383, 2420,
高精度:1001, 1220, 1405, 1503,
排序:1002, 1318, 1877, 1928, 1971, 1974, 1990, 2001, 2002, 2092, 2379, 2388, 2418, 推薦:1423, 1694, 1723, 1727, 1763, 1788, 1828, 1838, 1840, 2201, 2376, 2377, 2380,
搜索容易:1128, 1166, 1176, 1231, 1256, 1270, 1321, 1543, 1606, 1664, 1731, 1742, 1745, 1847, 1915, 1950, 2038, 2157, 2182, 2183, 2381, 2386, 2426, 不易:1024, 1054, 1117, 1167, 1708, 1746, 1775, 1878, 1903, 1966, 2046, 2197, 2349, 推薦:1011, 1190, 1191, 1416, 1579, 1632, 1639, 1659, 1680, 1683, 1691, 1709, 1714, 1753, 1771, 1826, 1855, 1856, 1890, 1924, 1935, 1948, 1979, 1980, 2170, 2288, 2331, 2339, 2340,
數據結構容易:1182, 1656, 2021, 2023, 2051, 2153, 2227, 2236, 2247, 2352, 2395, 不易:1145, 1177, 1195, 1227, 1661, 1834, 推薦:1330, 1338, 1451, 1470, 1634, 1689, 1693, 1703, 1724, 1988, 2004, 2010, 2119, 2274,
動態規劃容易:1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 1189, 1208, 1276, 1322, 1414, 1456, 1458, 1609, 1644, 1664, 1690, 1699, 1740, 1742, 1887, 1926, 1936, 1952, 1953, 1958, 1959, 1962, 1975, 1989, 2018, 2029, 2033, 2063, 2081, 2082, 2181, 2184, 2192, 2231, 2279, 2329, 2336, 2346, 2353, 2355, 2356, 2385, 2392, 2424, 不易:1019, 1037, 1080, 1112, 1141, 1170, 1192, 1239, 1655, 1695, 1707, 1733, 1737, 1837, 1850, 1920, 1934, 1937, 1964, 2039, 2138, 2151, 2161, 2178, 推薦:1015, 1635, 1636, 1671, 1682, 1692, 1704, 1717, 1722, 1726, 1732, 1770, 1821, 1853, 1949, 2019, 2127, 2176, 2228, 2287, 2342, 2374, 2378, 2384, 2411,
字元串:1488, 1598, 1686, 1706, 1747, 1748, 1750, 1760, 1782, 1790, 1866, 1888, 1896, 1951, 2003, 2121, 2141, 2145, 2159, 2337, 2359, 2372, 2406, 2408,
貪心:1042, 1065, 1230, 1323, 1477, 1716, 1784,
圖論容易:1161, 1164, 1258, 1175, 1308, 1364, 1776, 1789, 1861, 1939, 1940, 1943, 2075, 2139, 2387, 2394, 2421, 不易:1041, 1062, 1158, 1172, 1201, 1275, 1718, 1734, 1751, 1904, 1932, 2173, 2175, 2296, 網路流:1087, 1273, 1698, 1815, 2195, 匹配:1274, 1422, 1469, 1719, 2060, 2239, Euler:1237, 1637, 1394, 2230, 推薦:2049, 2186,
計算幾何容易:1319, 1654, 1673, 1675, 1836, 2074, 2137, 2318, 不易:1685, 1687, 1696, 1873, 1901, 2172, 2333, 凸包:1113, 1228, 1794, 2007, 2187,
模擬容易:1006, 1008, 1013, 1016, 1017, 1169, 1298, 1326, 1350, 1363, 1676, 1786, 1791, 1835, 1970, 2317, 2325, 2390, 不易:1012, 1082, 1099, 1114, 1642, 1677, 1684, 1886,
數學容易:1061, 1091, 1142, 1289, 1305, 1306, 1320, 1565, 1665, 1666, 1730, 1894, 1914, 2006, 2042, 2142, 2158, 2174, 2262, 2305, 2321, 2348, 不易:1067, 1183, 1430, 1759, 1868, 1942, 2167, 2171, 2327, 推薦:1423, 1450, 1640, 1702, 1710, 1721, 1761, 1830, 1930, 2140,
『肆』 如何提高口算速度,求一些口算的高等技巧,加減和乘除都要,打算舉行一個大學生口算比賽
一、20以內加減法的口算
1、加法
20以內進位加法思維訓練的方法很多:有點數法、接數法、湊十法,口決法,推導法、減補法等。要根據學生所處的文化環境、家庭背景和自身思維的不同,由學生自己動手實踐、自主探索與合作交流來實現。這里重點介紹:減補法。
我們規定:兩個可以湊成10的數是互為補數,1和9,2和8,3和7等。都是互為補數。
方法是:用第一個加數減去第二個加數的補數,再加上10 。比如:
9+4=13
思考方法:第二個加數的補數是6;第一個加數9減去4的補數6得3;3加上10,得13。 即 9+4 = 9 - 6+10 = 3+10 = 13
這樣的思考途徑,對於培養學生的逆向思維能力很有好處,但只能符合思維能力強的學生。教師可以根據情況引導。
2、減法
20以內退位減法是以20以內加法為基礎的,方法有:想加法計算減法、破十法、分解減法後連減法、記小數數到大數、推導法、加補法等。這里重點介紹加補法:
方法是:用被減數個位上的數加上減數的補數,同時去掉十位上的「1」,比如:被減數
13 - 4 = 9
思維方法:被減數個位上的3不夠減;減數4的補數是6;6加上被減數個位上的3,得9,同時去掉十位上的「1」。
二、兩位數加減法口算:
兩位數加減法這里重點介紹減補法和加補法,首先我們規定:兩個和為100的數互為百補數。
1、加法
兩位數加法有四種現象,即個位、十位都不進位的;個位進位十位不進位的;十位進位個位不進位的;個位十位都進位的。下面分別介紹:
(1)、個位十位都不進位的兩位數加法,用數的組成法直接相加。
例:34 + 52 = 30 + 50 + 4 + 2 = 86
(2)個位進位十位不進位的兩位數加法,思維方法是:
一個加數十位上的數字加上另一個加數十位上的數字再加「1」,得十位上的數字,個位用一個加數個位上的數字減去另一個加數個位上數字的百補數,得個位上的數字。
例:36+ 47 = 83
口算過程:十位上的數字是3 + 4 + 1=8
個位上的數字是6 - 3(3是7的十補數)=3
或 7 - 4(4是6的十補數)=3
所以:36+47十位數字是8,個位數字是3,等於83。
(3)十位進位個位不進位的兩位數加法,思維方法是:
首先確定「百」位數字是「1」,然後用一個加數十位上的數字減去另一個加數十位上數字的十補數,得十位上的數字,個位上的數用數的組成法直接相加。
例:83 + 64 = 147
口算過程:百位是「1」.
十位數字是 8 - 4 = 4 或 6 - 2 = 4.
個位是 3 +4 = 7.
所以:83 + 64百位數字是1,十位數字是4,個位數字是7,等於147
(4)個位十位都進位的兩位數加法,思維方法是:
首先確定百位數字是「1」,然後用一個加數減去另一個加數的百補數,得十位和個位上的數字。
例:86 + 59= 145
口算過程:百位是「1」.
十位和個位上的數字用 86 - 41(59的百補數)=45
或 59 - 14(86的百補數) =45.
所以:86+59百位是1,十位和個位是45,等於145.
2、退位減法
兩位數減法我們重點探討退位減法。
(1)兩位數減兩位數, 思維方法是:
首先用被減數十位數字減去減數十位數字再減「1」,是差的十位數字,然後用被減數個位數字加上減數個位數字的十補數,是差的個位數字。
例:83 - 26 = 57
口算過程:十位數字是 8 - 2 -1= 5
個位數字是 3+4(4是6的十補數)=7
所以 83-26十位數字是5,個位數字是7,等於57.
(2)被減數是一百幾十的退位減法,思維方法是:
首先確定百位是1-1=0 即這個數的差是幾十幾,然後用被減數十位和個位的數字加上減數十位和個位數字的百補數,就是差。
例132 - 67 = 65
口算過程:32+33(33是67的百補數)=65.
三、兩位數乘法口算
一位數乘法口算就是口訣表,在講清算理的基礎上要求背會。這里重點介紹幾種兩位數乘法的特殊演算法。
1、兩個相同因數積的口演算法;(平方口演算法)
(1)、基本數與差數之和口演算法:
基本數:這個數各位分別平方後,組成一個新的數稱基本數。十位平方為基本數百位以上的數,個位平方為基本數十位和個位數,十位無數用零佔位。
差數:這個數十位和個位的積再乘20稱差數。
基本數 + 差數 = 這兩個相同因數的積。
例1、13×13
基本數:百位:1×1=1
十位:用0佔位
個位:3×3=9
所以基本數就是 109
差數:1×3×20=60
基本數 + 差數 = 109 + 60 = 169
所以13×13=169
例2、67×67
基本數:百位以上數字是 6×6=36
十位和個位數字是7×7=49
所以基本數是 3649
差數:6×7×20=840
基本數+差數=3649+840=4489
所以:67×67 = 4489
(2)三步到位法
思維過程:
第一步:把這個數個位平方。得出的數,個位作為積的個位,十位保留。
第二步:把這個數個位和十位相乘,再乘2,然後加上第一步保留的數,所得的數的個位就是積的十位數,十位保留。
第三步:把這個數十位平方,加上第二步保留的數,就是積的百位、千位數。
例1、24×24
第一步:4×4=16 「1」保留,「6」就是積的個位數。
第二步:4×2×2+1=17 「1」保留,「7」就是積的十位數。
第三步 :2×2+1=5 「 5」就是積的百位數.
所以24×24=576
例二、37×37
第一步:7×7=49 "4"保留,"9",就是積的個位數。
第二步:3×7×2+4=46 "4"保留,"6",就是積的十位數。
第三步 :3×3+4=13 "13"就是積的百位和千位數字。
所以:37×37=1369
(3)、接近50兩個相同因數積的口算
思維方法:比50大的兩個相同數的積等於5乘5加上個位數字,再添上個位數字的平方,(必須占兩位,十位無數用零佔位):比50小的兩個相同數的積,等於5乘5減去個位數字的十補數,再添上個位數字十補數的平方(必須占兩位,十位無數用零佔位)。
例1、53×53
5×5+3=28 再添上3×3=9 (必須兩位09) 等於2809
所以:53×53=2809
例2、58×58
5×5+8=33 再添上8×8=64 等於3364
所以:58×58=3364
例3、47×47
5×5-3(3是7的十補數)=22 再添上3×3=9 (必須兩位09)
等於2209
所以:47×47=2209
(4)、末位是5的兩個相同因數積的口算
思維方法:設這個數的十位數字為K,則這兩個相同因數的積就是:K×(K+1)再添上5×5=25 或者 K×(K+1)×100+25
例 1、 35×35=3×(4+1)×100+25=1225
例2、75×75=7×(7+1)×100+25=5625
兩個相同因數積的口算方法很多,這里就不一一介紹了。我們利用兩個相同因數積的口算方法可以口算好多相近的兩個數的積。舉例如下:
例1、13×14
因為:13×13=169 再加13得182 所以 :13×14=182
或者14×14 因為:14×14=196 再減14 還得182
例2、35×37
因為:35×35=1225 再加70(2×35)得1295
所以 35×37=1295
2、首尾有規律的數的口算
(1)首同尾合十(首同尾補)
思維方法:首數加「1」乘以首數,右邊添上尾數的積(兩位數),如積是一位數,十位用零佔位。
例:76×74=(7+1)×7×100+6×4=5624
(2)尾同首合十(尾同首補)
思維方法:首數相乘加尾數,右邊添上尾數的平方(兩位數),如積是一位數,十位用零佔位。
例:76×36=(7×3+6)×100+6×6=2736
(3)一同一合十(一個數兩位數字相同,一個數兩位數字互補)
思維方法:兩個數的十位數字相乘,再加上相同數字,右邊添上兩尾數的積。如積是一位數,十位用零佔位。
例:33×64=(3×6+3)×100+3×4=2112
以上三種方法,可以用一個公式計算即:
(頭×頭+同)×100 + 尾×尾
3、利用特殊數字相乘口算
有些數字很特殊,它們的積是有規律的。
(1)7乘3的倍數或3乘7的倍數
先看看下面的幾個式子:
7×3=21 7×6=42 7×9=63
7×12=84 7×15=105 7×18=126......7×27=189
我們觀察這幾個式子被乘數都是7,乘數是3的倍數.是3的幾倍,積的個位就是幾,積的十位或者十位以上的數字始終是個位的2倍.
因此,我們可以說:7乘3的倍數,等於該倍數加該倍數的20倍.
果我們設這個倍數為N,用公式表示:7×3N=N+20N(N>0的正整如數)
例1、7×27=7×3×9=9+20×9=189
例2、7×57=7×3×19=19+20×19=398
這個結論3乘7的倍數也適用.我們用這個結論可以口算3的倍數和7的倍數的兩個數相乘.
例3、14×15=7×2×3×5=7×3×10=10+20×10=210
例4、28×36=7×4×3×12=7×3×48=48+20×48=1008
(2)、17乘3的倍數或3乘17的倍數
17乘3的倍數,等於該倍數加該倍數的50倍.(3乘17的倍數也適用)
如果我們設這個倍數為N,用公式表示:17×3N=N+50N(N>0的正整數)
例1、17×21=17×3×7=7+50×7=357
例2、17×84=17×3×28=28+50×28=1428
例3、34×24=17×2×3×8=17×3×16=16+50×16=816
(3)、17乘13的倍數或13乘17的倍數
17乘13的倍數等於該倍數加該倍數的20倍,再加200倍。
如果我們設這個倍數為N,用公式表示:17×13N=N+20N+200N(N>0的正整數)
例1、17×78=17×13×6=6+20×6+200×6=1326
例2、34×65=17×2×13×5=17×13×10=10+20×10+200×10
=2210
例3、34×78=17×2×13×6=17×13×12=12+20×12+200×12
=2652
(4)43乘7的倍數或7乘43的倍數
43乘7的倍數等於該倍數加該倍數的300倍。
如果我們設這個倍數為N,用公式表示:43×7N=N+300N(N>0的正整數)
例1、43×28=43×7×4=4+300×4=1204
例2、43×84=43×7×12=12+300×12=3612
4、兩個接近100的數相乘的口算
(1)超過100的兩個數相乘
思維方法:先把一個因數加上另一個因數與100的差,然後在所得的結果後面添上兩個因數分別與100之差的積。
例1、103×104=(103+4)×100+3×4=10712
例2、112×107=(112+7)×100+12×7=11984
(2)不足100的兩個數相乘
思維方法:先從一個因數中減去另一個因數與100的差,然後在所得的結果後面添上兩個因數分別與100之差的積。
例1、92×94=(92-6)×100+8×6=8648
或者:92×94=(94-8)×100+8×6=8648
(3)一個超過100,一個不足100的兩個數相乘
思維方法:超過100的數減不足100的差,擴大100倍後,減去兩個因數分別與100之差的積。
例1、104×97=(104-3)×100-4×3=10100-12=10088
口算的技巧太多了。以上僅介紹了部分特殊口算技巧,還有利用運算定律和運算性質可以口算;利用湊整法可以口算等等。要求我們教師要熟記和掌握這些方法,關鍵只有一種:最終近快的准確的口算出結果。
基本口算要熟練。20以內進位加減法和退位減法及表內乘除法必須達到「脫口而出」的熟練程度。因為任何一道四則計算題,都是一系列口算的綜合,如果其中有一步口算失誤,就會前功盡棄。口算的准確和熟練程度直接制約著計算能力的培養和提高。
常用數據要熟記。計算中的常用數據如果能在理解的基礎上熟記,可以大大提高計算的准確性和速度。如4×25=100、4×75=300、8×125=1000、1÷2=0.5、1÷4=0.25、3÷4=0.75、1÷8=0.125(12.5%)等。
簡便口算要自覺。利用數字特徵和運算關系,應用運算定律或性質自覺地進行簡便計算,有利於培養學生思維的靈活性和敏捷性。如389+298、654-496可以利用和、差的規律進行簡算。389+298=389+300-2=689-2=687,654-496=654-500+4=154+4=158,多加幾就減去幾;多減幾就加上幾。312×25、2700÷125可以利用積、商變化的規律進行簡算。312×25=(312÷4)×(25×4)=78×100=7800,2700÷125=(2700×8)÷(125×8)=21600÷1000=21.6
練習口算要經常。口算的練習應貫穿於教學活動的全過程,要圍繞教學內容,有針對性。有目的性低進行。新授前練口算,「溫故知新」起到遷移的作用。新授中練口算,有利用新知的鞏固。新授後練口算,有利於形成良好的認知結構,能使學生自覺地應用運算定律或運算性質,改變原有的運算順序,使計算簡便。
口算技能要培養。在理解算理的基礎上掌握口算方法,是學習口算的第一步,也是重要的一步,但到了一定程度,就要簡化、壓縮思維過程,形成口算的技能、技巧。如有些同級算的式題,36÷7×14, 72×18÷24從表面來看無法口算,根據運算定律或預算性質,進行合理的調整以後,就可以進行口算。36÷7×14=36×(14÷7)=36×2=72,72×18÷24=72÷24×18=3×18=54.或者改變一下運算的形式:36÷7×14=36×1÷7×14,72×18÷24=72×18×1÷24,在運算時,還可以把一些數拆成兩數的和、兩數的差、兩數的積或商,使計算簡便。
『伍』 計算機經典演算法——錦標賽排序演算法
關鍵詞 :二叉樹
生活中的淘汰錦標賽 :在單淘汰的錦標賽中,選手們兩兩比賽,勝者晉級,敗者被淘汰。比如世界乒乓球錦標賽或者大滿貫網球賽就是這么進行的。
這樣一來,就可以把比賽的賽程和結果對應成一個二叉樹。在樹中每一個選手是二叉樹中的一個葉子結點,每一場比賽就相當於兩個數字在比大小,數字大的選手獲勝進入下一輪,成為樹幹上的根。所以,進入到某一輪比賽的選手,其實都是某個子數乾的根結點。最後的冠軍就是整個二叉樹的根結點。這種賽制的合理性需要一個假設:A>B, B>C --> 必然有A>C(輸贏的傳遞性)
工程中,要比較兩個數字的大小
第一步:把所有的數字放到二叉樹的葉子節點,然後按照錦標賽單淘汰的方式,兩兩比較選出最大
第二步:對於第二大的,從所有被最大的數字淘汰的數字中選擇,以此類推選擇對於第三、第四大的數字
假定有25名短跑選手比賽競爭金銀銅牌,賽場上有5條賽道,因此一次可以有5個人同時比賽。比賽不及時,只看相應的名次。假如選手的發揮是穩定的,也就是說如果約翰比張三跑的快,張三比凱利跑的快,那麼約翰一定比凱利跑得快。最少需要幾組比賽才能決出前3名?
第一步,將25名選手分成5組,每組5人。讓每個組分別比賽,排出各組的名次來,假設他們的名字就是他們在小組中的編號。
第二步,讓各組的第一名,也就是A1、B1、C1、D1、E1再比一次。假設A1在這次比賽中獲勝,這樣我們就知道了第一名。
第四步,如上圖通過8次(5 +1 + 1 +1)選出的5人進行第三名的比賽,前3全部產生
更好的答案:
前6次比賽都是必須的,最佳答案的前2步和上述方案中的前2步是相同的。在第6組比賽(即5個第一名的比賽)結束之後,最後的2名已經沒有資格角逐前3名了。
不妨假設那一次比賽從最快到最慢的結果是A1、B1、C1、D1、E1,在D1和E1之前已經有3名選手了,他們肯定不是前3名。
誰還會是第二名的候選呢?根據錦標賽排序的原則,直接輸給第一名的人,也就是A2,以及最後附加賽輸給他的B1,僅此兩人而已。
誰會是第三名的候選呢?和A1在某一組比賽的第三名,他們是A3、C1,或者輸給第二名候選人B1的人,即B2。
因此,第二、第三名的候選人一共只有5個, A2、A3、B1、B2和C1,剛好湊一組。這樣加上前6次,只需要賽7組,這是最佳方法。
註:來自吳軍老師得到課程
『陸』 少兒編程有哪些比賽要怎樣報名
Scratch語言:
1、全國青少年創意編程與智能設計大賽。
2、谷歌全國中小學生計算思維編程挑戰賽。
3、全國中小學生電腦製作大賽。
程序開發路線圖:
scratch 1.4、scratch 2.0、Scratch 3.0軟體分別是用Smalltalk、flash、html5開發的。關於這個程序語言的詳細介紹只有英文的內容。
作為「OLPC(One Laptop per Child,每個孩子都有一台電腦)」項目的一部分,Smalltalk提出一個建議的語言學習順序,其中的每種語言都被設計成下一種的入門和基礎。這個順序是:Scratch-Etoys-Squeak-任意Smalltalk。在學習的過程中,每一種語言都提供了圖形化的編程環境。
以上內容參考網路——Scratch,網路——兒童編程