NOIP2007提高組題解

2021-08-23 14:24:58 字數 2783 閱讀 4957

考察知識:快速排序,map的基本操作

演算法難度:xx || x 實現難度:xx || x+

分析:如果用快排的話,要用分治思想,難度稍微大一些,用map就是基本操作,難度不大

如果追求速度可以寫乙個快速輸入函式,但是注意輸入是否有負數

map版**(含快速輸入):

#include#include#includeusing namespace std;

int t;

char ch;

void scan(int& in_) in_=0;

while(isdigit(ch)) in_=in_*10+ch-'0',ch=getchar();

in_*=t;

}mapmp;

map::iterator it;

int n,k;

int main()

考察知識:字串,模擬演算法難度:xx 實現難度:***分析:按照題目說的來就可以了,但是要注意審題,要考慮全面,如:

#include#include#include#includechar str[105];

int p1,p2,p3;

int main()

} else putchar(str[i]);

return 0;

}

考察知識:高精度,區間型動態規劃演算法難度:xx 實現難度:***分析:讀懂題意後我們發現我們可以把矩陣拆分成n排,每排m個元素的序列,然後針對每一排序列用動態規劃:1.定義f(curi,j)表示第cur排序列[i,j]取數的最大值

2.邊界:

3.答案

4.狀態轉移方程:

因為最後的答案很大,使用要用高精度

**:

#include#include#include#includeusing namespace std;

struct bign

void get_v(int v)

friend bool operator < (bign a,bign b)

friend bign operator * (bign a,int x)

friend bign operator * (bign a,bign b)

void out(bool entr=true)

}ans,f[82][82],b[82];

int n,m,a[100][100];

void calc(int cur)

ans=ans+f[1][m];

}int main()

考察知識:樹的基本知識,樹的直徑,列舉演算法難度:*** 實現難度:***+分析:題目有點亂,定義有點多,但是這道題並不難,根據題目的定義列舉可能的端點並計算偏心距就可以了演算法:1.先找樹的一條直徑

2.計算直徑上的每乙個點到樹的分支(不包含直徑)的最大距離

3.列舉直徑上所有距離小於s的兩點,計算這一段路徑的偏心距,偏心距=max(兩點到直徑端點(不經過這段路徑)的距離,路徑上每一點到這一點所在樹的分支的最大距離)

#include#includeusing namespace std;

const int maxn=305;

struct edgee[maxn*2];

int first[maxn],np;

void add(int u,int v,int l);

first[u]=np;

}int n,s,a,b,dis[maxn],dis2[maxn],fa[maxn];

bool vis[maxn];

void dfs(int i,int f,int dist,int& r)

}void dfs2(int i,int dist,int rt)

}void build()

dfs(1,0,0,a=0);//找直徑

dfs(a,0,0,b=0);

for(int i=b;i;i=fa[i]) vis[i]=true;

for(int i=b;i;i=fa[i]) dfs2(i,0,i);//計算分支最大距離

}int ans=0xffffff;

void solve()

ans=min(ans,t);

} else break;

printf("%d\n",n==1?0:ans);

}int main()

noip2007提高組題解

第一題 統計數字 排序 平衡二叉樹 受上面這篇文章的影響,我沒有用快排,而是用了stl的multiset的count函式來統計出現次數。但事實證明stl的sort足以應付此題。另外的解法是用treap實現的名次樹,效率不及sort但高於multiset。第二題 字串的展開 模擬 雖然是模擬題但是可惜...

NOIP2007 提高組 題解

2007 提高組題解 第一題 一開始還想是不是要用雜湊表儲存呢,但仔細想了一會兒,那個資料量20w 用個快排序,時間是能過的。所以這道題用個stl的快排,再乙個迴圈統計個數就ok了。但最後交上去評測時0分,很尷尬。就是我在資料初始化時從一開始計數,我迴圈又從一開始,多算了一次,爆掉了。改了就100了...

NOIP2007提高組 樹網的核

noip2007提高組試題4。設 t v,e,w 是乙個無圈且連通的無向圖 也稱無根樹 每條邊帶有正整數的權,我們稱 t 為樹網 treenetwork 其中 v,e 分別表示結點與邊的集合,w 表示各邊長度的集合,並設 t 有 n 個結點。路徑 樹網中任何兩個結點 a,b 都存在唯一的一條簡單路徑...