ACM注意事項及一些小技巧

做題的一些心得,想到幾點寫幾點,以後又想到了再補:1.scanf(),printf()和cin,cout不要混用,輸入資料量比較大的話會導致緩衝區衝突。2.對於大數組放到全域變數裡,局部變數記憶體使用量量不能超過64k;3.對於多組資料,每次算都要資料初始化;4.sort(first,last),last是past-the-end,就是要排序的元素的最後一個的後一個;5.對於需要不停插入資料,並保持有序的可以用STL的set容器,它是用平衡二叉樹實現的,免去了自己再去寫一個的麻煩,用起來真是輕鬆

【最大團模板】

ZOJ 1492 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=492/*最大團 = 補圖G的最大獨立集數———>最大獨立集數 = 補圖G'最大團*///最大團模板#define N 102int mx;//最大團數(要初始化為0)int x[N],tuan[N];int can[N][N];//can[i]表示在已經確定了經選定的i個點必須在最大團內的前提下還有可能被加進最大團的結點集合int

POJ 圖論、網路流題目

POJ 2449 Remmarguts' Date(中等)http://acm.pku.edu.cn/JudgeOnline/problem?id=2449題意:經典問題:K短路解法:dijkstra+A*(rec),方法很多相關:http://acm.pku.edu.cn/JudgeOnline/showcontest?contest_id=1144該題亦放在搜尋推薦題中POJ 3013 - Big Christmas

【二分匹配匈牙利演算法模板】

注意內外迴圈!!!#define N 204int match[N];bool vis[N];int g[N][N];int n,m;bool sear(int s){ int i,j; for(i=1;i<=m;i++){//內迴圈是y集合(可以根據下一行的鄰接矩陣改變一下) if(g[s][i] && !vis[i]){ vis[i] = 1; if(match[i] == 0 ||

【網路流各種模板】

EK 複雜度O(V*E*E)#define N 204 int c[N][N];//邊容量 int f[N][N];//邊實際流量 int pre[N];//記錄增廣路徑 int res[N];//殘餘網路 queue<int> qq; void init(){ while(!qq.empty())qq.pop(); memset(c,0,sizeof(c)); memset(f,0,sizeof(f)); } int EK(int

【歸併樹—求第K小數】POJ 2104/HDU 2665

歸併樹 O(logn*logn*logn) for each query,很慢的說,劃分樹版http://blog.csdn.net/leolin_/article/details/6696801/*//1,建立歸併樹後我們得到了序列key[]的非降序排列,由於此時key[]內元素的rank是非遞減的,因此key[]中屬於指定區間[s,t]內的元素的rank也是非遞減的,所以我們可以用二分法枚舉key[]中的元素並求得它在[s,t]中的rank值,直到該rank值和詢問中的rank值相等;//2

MS資料訪問加速模組介面

  static string ConnStr = System.Configuration.ConfigurationSettings.AppSettings["ConnStr"].ToString();   public static SqlDataReader GetReader(string sqlSpName)  {   return SqlHelper.ExecuteReader(ConnStr, sqlSpName);  }  public static

【尾碼數組模板】

hight數組是靈魂!倍增演算法O(nlgn)#define maxn 100010int wa[maxn],wb[maxn],wv[maxn],wss[maxn];//論文模板的ws竟然跟g++裡的關鍵字衝突!int r[maxn],sa[maxn];int cmp(int *r,int a,int b,int l){return r[a]==r[b] && r[a+l]==r[b+l];}/*【倍增演算法O(nlgn)】待排序的字串放在r

【左偏樹】HDU 1512/ZOJ 2334

推薦黃源河的論文http://wenku.baidu.com/view/515f76e90975f46527d3e1d5.html #define N 100010struct node{ int dis,v; int l,r;}k[N];int n,m,pre[N];void init(){ int i; for(i=0;i<=n;i++){ pre[i] = i; } memset(k,'\0',sizeof(k));}int

劉汝佳黑書POJ題目

一.動態規劃參考資料:劉汝佳《演算法藝術與資訊學競賽》《演算法導論》推薦題目:http://acm.pku.edu.cn/JudgeOnline/problem?id=1141 簡單http://acm.pku.edu.cn/JudgeOnline/problem?id=2288 中等,經典TSP問題http://acm.pku.edu.cn/JudgeOnline/problem?id=2411 中等,狀態壓縮DPhttp://acm.pku.edu.cn/JudgeOnline/proble

【定徑圓覆蓋最多點模板】

#define eps 1e-9#define pi acos(-1.0)#define N 222struct point{ double x,y;}p[N];struct alpha{ double v; bool flag; bool friend operator <(const alpha &a,const alpha &b){//排序專用偏序關係 return a.v < b.v; }}alp[N *

子陣最小值查詢_二維RMQ

給定一個n*n的矩陣,有q次查詢,每次查詢一個子矩陣最小值YY了一個n^2log(n)+n*q 的演算法:建了n個一維RMQ,預先處理n*n*log(n),每次查詢複雜度O(n),果斷TLEGoogle了一下才發現還有二維RMQ這種東西。。。對代碼用類封裝了下。。。RMQ_2D(O(n*n*log(n)*log(n)預先處理,O(1)查詢,查詢以(x1,y1),(x2,y2)為對角的矩形最小值)class RMQ_2D{ int dMin[MAXF][MAXF][MAXN][MAXN]; 

【背包模板】

int V;//容量 //01void zeroone(int cost,int val){//費用,價值 int i; for(i=V;i>=cost;i--){ if(dp[i]<dp[i-cost]+val){ dp[i] = dp[i-cost]+val; } } } //完全背包void complete(int cost,int val){//費用,價值 int

【Gray格雷碼】

Gray碼(轉自M67大牛)Gray碼     假如我有4個潛在的GF,我需要決定最終到底和誰在一起。一個簡單的辦法就是,依次和每個MM交往一段時間,最後選擇給我帶來的“滿意度”最大的MM。但看了dd牛的理論後,事情開始變得複雜了:我可以選擇和多個MM在一起。這樣,需要考核的狀態變成了2^4=16種(當然包括0000這一狀態,因為我有可能是玻璃)。現在的問題就是,我應該用什麼順序來遍曆這16種狀態呢?     傳統的做法是,用位元的順序來遍曆所有可能的組合。也就是說,我需要以0000->0

【LCA模板題】POJ 1330

RMQ版#define N 10010struct edge{ int v; int next;}e[2*N];int ecnt;int head[N];bool vis[N];int n;//點數int R[N];//第一次出現i點下標int p[N*2];//記錄路徑點編號//int dis[N];//與根的距離int dep[2*N];//深度int dp[20][2*N];//從j開始長度為2^i路徑的最近公用祖先下標int num;void init(){

Just Sum It [UvaLive 5063] DP+組合數

TLE到死,加了n多最佳化才過,淚流滿面.題意:  給你a1,a2..a9,ai表示有ai個i,問用這些數字組成的不同的數的和MOD 1000000007以後是多少.題解:  首先方法顯然:       枚舉位元,枚舉某個數在哪個位上,假設有l位,數i在第j位上,則i在這個位上貢獻的值為i*10^(j-1)*(剩下的數排列成l-1位的不同排列個數).       在所有不同的位元下,所有數在不同位置上貢獻的值求和即是所求結果.然後痛點是如何求:剩下的數排列成l-1位的不同排列個數  

【tarjan求解雙連通分量】

無向圖的連通分支(連通子圖): 判斷一個無向圖是否連通,如果進行dfs或者bfs之後,還有未訪問到的頂點,說明不是連通圖,否則連通。求解無向圖的所有連通分支: 只需要重複調用dfs或者bfs 就可以解決:遍曆頂點,如果v 未訪問,則對其進行dfs, 然後標記訪問。關節點(割點): 是圖中一個頂點v, 如果刪除它以及它關聯的邊後,得到的新圖至少包含兩個連通分支。雙連通圖: 沒有關節點的連通圖。連通無向圖的雙連通分支(雙連通子圖,塊) : 是圖G中一個最大雙連通子圖。利用深度優先搜尋dfs

Perfect Domination on Trees [UVALive 3346] 樹形DP

題意:給你一棵樹,用黑白染色,求最少的染黑的個數,使得每個白點都與且只與1個黑點相連。題解:dp[x][f]表示將x染成f狀態最少需要染多少黑點,f有三種狀態:0,1,20:表示該點為白色,且他的所有兒子都為白色。1:表示該點為黑色。2:表示該點為白色,且他有一個兒子為黑色。dp[x][1]=sigma(min(dp[son(x)][1],dp[son(x)][0]));dp[x][0]=sigma(dp[son(x)][2]);dp[x][2]=min(dp[son(xi)][1]+sigma

【無向圖求最小割集】

一個無向連通網路,去掉一個邊集可以使其變成兩個連通分量則這個邊集就是割集;最小割集當然就權和最小的割集。可以用最小切割最大流定理:1.min=MAXINT,確定一個源點2.枚舉匯點3.計算最大流,並確定當前源匯的最小割集,若比min小更新min4.轉到2直到枚舉完畢5.min即為所求輸出min   

Dome of Tuxville [UVALive 3347] 類比退火

題意:有n個樓,給定xy座標和高度,有一個防護盾核心,以他為球心的半球內的都處於他的保護之下,求他的座標,使得他需要覆蓋全部樓的半徑最小。題解:類比退火。 第一個類比退火,哈哈。傳統的類比退火如果目前狀態更有就接受,否則以一定機率接受,機率的存在保證不會跳進局部最優而出不來。不過用機率搞貌似效果不是很好,然後就初始產生100組解,對著100組並行操作,只在更優的時候接受,這樣每組解最後都會到達他所在地區的局部最優解,而全域最優解很有可能就在這些局部最優解之中,對這100組取個最優作為全域最優值。

總頁數: 61357 1 .... 13142 13143 13144 13145 13146 .... 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.