題目本身有問題。首先學分和分數要求是實型的而不是整型的,這就要求用double,其次題目有個地方沒說清楚,就是GPA不存在的情況,全都曠課算不存在,同時GPA為零也算不存在。# include <iostream># include <iomanip>using namespace std;void main(){ int n; while(cin>>n) { double credit,score; double count=0.0,credsum=0.
死磕了2天的KM,總算理解了七八分了。。。。下面是網上各種東西的雜糅+自己的說明,死磕應該能看懂。KM演算法是通過給每個頂點一個標號(叫做頂標)來把求最大權匹配的問題轉化為求完備匹配的問題的。設頂點Xi的頂標為A[i],頂點Yi的頂標為B[i],頂點Xi與Yj之間的邊權為w[i,j]。在演算法執行過程中的任一時刻,對於任一條邊(i,j),
分別使用C++中的運算子多載的方法來實現大數之間的數學運算,包括加法、減法、乘法、除法、n次方、模數、大小比較、賦值以及輸入資料流、輸出資料流的重載。。並且使用這個大數模板,順利AC了HDOJ上的1134這個題目的Catalan數計數問題。。http://acm.hdu.edu.cn/showproblem.php?pid=1134大數模板的代碼如下:#include<iostream> #include<string> #include<iomanip> #
#include <stdio.h>#include <string.h> #include <stdlib.h> #include <math.h>#include <assert.h> #include <ctype.h> #include <map>#include <string>#include <set>#include <bitset>#include <
首先上http://www.topcoder.com/tc?module=Static&d1=applet&d2=plugins下載3個外掛程式:TZTester,CodeProcessor,FileEdit。然後登陸Arena,選擇"option"->"editor",然後“Add”,Name隨意寫,比如MyProcessor,EntryPoint選擇codeprocessor.EntryPoint,大小寫敏感。然後在class
#include <string>#include <vector>#include <algorithm>#include <iostream>#include <sstream>#include <fstream>#include <map>#include <set>#include <cstdio>#include <cmath>#include
#include<iostream> #include<string> #include<fstream> using namespace std; int time_to_int(string time){ int time_int = 0; int hour = 0; int minute = 0; if(time[0] != '0'){ hour = (int)(time[0] - 4
來自於劉汝佳的”資訊學競賽系列叢書”。void getFail(char* P, int* f){int m = strlen(P);f[0] = 0;f[1] = 0;for(int i = 1; i < m; i++){int j = f[i];while(j && P[i] != P[j]){j = f[j];}f[i + 1]=P[i]==P[j]?j+1:0;}}int find(char* T, char*P, int*f){int n = strlen(T),
模板1(主):性質:low[]的值相等的點為同一個連通分量。int rt, cnt;// rt記錄根下標,rt_son為根直接連接的兒子的數量,當其>1時根為割點,易證。int vis[Max], dfn[Max], low[Max]; // dfn[i]為第i個結點在搜尋樹中的深度,low[i]為第i個結點的子樹的所有兒子串連到的最上面的結點層數。bool cut[Max];// cut[i] = true說明第i個節點為割點。vector<int> adj[Max];//
只要把尋找函數改一下就好了,當找到匹配即j==m的時候不要列印,而是count++;j = f[j];continue;這三句的含義是把count更新完後,把當前的匹配當做失配處理,再沿著失配邊繼續尋找“下一個匹配”。//模板開始#include <string> #include <vector> #include <algorithm> #include <iostream> #include <sstream>
演算法思路:DFS。這一題可以用DFS + 回溯的方法進行暴力枚舉。但還是要注意可行性的判斷,及時的break以減少時間開銷。要注意的是雖然n最大隻有10,但是case會很多,如果每次都DFS會TLE,所以要打表。這個問題只能怪測試資料太無聊了。自己剛開始做的時候沒有注意vis數組下標最大會達到 2 * n - 1,導致數組開得太小,訪問了非法記憶體,WA了,可怕的是像這種情況系統並不會有任何提示,照樣運行,還好及時發現,下次吸取教訓。//模板開始#include <string>
簡單的KMP。//模板開始#include <string> #include <vector> #include <algorithm> #include <iostream> #include <sstream> #include <fstream> #include <map> #include <set> #include <cstdio>
重裝一下JDK後,發現無法登入,用戶端無法啟動。以為是jdk沒搞好,又重裝一遍jdk,還是無法啟動用戶端。解決方案:clear java cache.基本步驟:控制台 => java => 常規 => 臨時Internet檔案 => 設定 => 刪除檔案 => 所有都打勾 =>確定。詳細:http://www.java.com/en/download/help/plugin_cache.xml重新登入ContestAppletProd,將自動下載
FAR HTML:HTML協助檔案工具 + 生產力, 提供對中文.CHM建立、編輯的良好支援。若建立的中文.CHM協助檔案出現亂碼,可於編譯.CHM檔案前,修改FAR HTML建立的工程檔案.HHP,在”項目設定“頁更改其檔案的語言與字型為相應的中文即可。DocumentX!:用於API文檔的製作。自動提取lib庫中的注釋。ASDoc:建立HTML網頁形式的API語言參考文檔。RoboHelp:用於開發協助系統、電子教學內容、知識庫以及方案和步驟chm製作工具
演算法思路:很明顯的求有向圖的強連通分量的題。 可以用tarjan演算法,這也是比較常規的做法。但是在網上看到有人用並查集做的,相當神奇! 神奇的並查集!方法轉載自:http://everhythm.blog.163.com/blog/static/1794590792011113101019305/思路 : 取定一個點n 第一個並查集表示 所有的點按一個方向都能到n 第二個並查集表示 把方向全反向 所有的點仍能到n
演算法思路:1. DFS,暴力搜尋,需要剪枝;2.1. dp(遞迴法),關鍵是遞迴函式的構造,如果想到了“狀態轉移方程”這一步是比較容易寫出代碼的;2.2. dp(遞推),關鍵是遞推的初值和遞推的順序。當然首先需要想出狀態轉移方程。下面分別列出這2種方法的詳細分析:方法一:125msAC,最慢的,思路很直接,看代碼。代碼如下:#include<iostream>#include<cmath>#include<algorithm>using namespace
#include <string> #include <vector> #include <algorithm> #include <iostream> #include <sstream> #include <fstream> #include <map> #include <set> #include <cstdio> #include
演算法思路;1.經典的並查集;2.連通且不存在迴路條件:邊數 + 1 = 頂點數注意陷阱(測試資料本身設計不太合理): 0 0 Yes 1 1 0 0 Yes//模板開始#include <string> #include <vector> #include <algorithm> #include <iostream> #include <sstream> #include <fstream>
題意就是找0到n有多少個數中含有49。資料範圍接近10^20DP的狀態是2維的dp[len][3]dp[len][0] 代表長度為len不含49的方案數dp[len][1] 代表長度為len不含49但是以9開頭的數位方案數dp[len][2] 代表長度為len含有49的方案數狀態轉移如下dp[i][0] = dp[i-1][0] * 10 - dp[i-1][1]; // not include 49 如果不含49且,在前面可以填上0-9 但是要減去dp[i-1][1] 因為4會和9構成49
繼續資料結構的複習,本次的專題是:並查集。 並查集,顧名思義,乾的就是“並”和“查”兩件事。很多與集合相關的操作都可以用並查集高效的解決。 兩個作業碼: int Find(int x) { if (tree[x].parent != x) { tree[x].parent = Find(tree[x].parent); } return tree[x].