ccf csp第八次認證

2021-07-22 15:54:12 字數 3625 閱讀 2225

首先今天參加的考試,也不知道對不對,但是也不會改了。拿出來就是分享一下。wa了別怪我哈。嘻嘻~~~~~~

第一題求相鄰兩數的最大差的絕對值

#include#include#includeusing namespace std;

#define maxn 10000

int num[maxn];

int main()

for(int i = 1;i < n; i++)

printf("%d\n",ans);

return 0;

}

第二題;模擬火車票售票,

#include#include#include#includeusing namespace std;

int num[1000];

int total[200];

int main()

} if(flag > 0)

} else

} for(int j = 0;j < ans.size(); j++)

node(int h,int a)

};struct role };

void add(role &x,node b,int p)

void del(role &x,int p,int d)

}int main()

else if(ope == "attack")

else

} else if(ope == "end")

}if(role[0].health <= 0) cout<<-1<

第四題:求到起點的滿足最短路徑的最小生成樹

我的做法是求最短路,然後在這個過程,滿足最短路的情況下,為每個點選擇最小的邊作為到達該點的路徑。

#include#include#include#include#include#include#includeusing namespace std;

#define maxn 10007

struct node

node(int vv,int cc) };

vectorhead[maxn];

int dist[maxn];

int cost[maxn];

int flag[maxn];

bool operator < (node a,node b)

int dif(int s,int n)

} } int ans = 0;

for(int i = 1;i <= n; i++)

ans += cost[i];

return ans;

}int main()

cout<

求能包含的最大層數。或者求包含最大層數的情況數。

60%的小資料課可以n^2暴力過的。

然後求最大的可以n*logn過的。

求情況數不會,主要還沒想清楚求區間大於某乙個數的數字個數。當時沒想到,也想錯了。

我的思路:離散化,保留座標的相對大小不影響結果。然後y軸每條直線建立乙個集合,

然後從下到上掃瞄。想通一件事就行,任何一點能鑲嵌的最大層數是這個點上、下、左、右

方向上點數最小的那個值。所以用線段樹維護區間最值就行了。

#include#include#include#include#include#include#include#includeusing namespace std;

#define maxn 2000007

struct point

};struct node

};#define maxv 500007

point point[maxv];

vectorheadx[maxv];

vectorheady[maxv];

node node[maxn];

//初始化線段樹

void build(int root,int l,int r)

int mid = (l+r)/2;

build(root*2+1,l,mid);

build(root*2+2,mid+1,r);

}//獲取區間內得到層數最大值以及情況數

node get(int root,int l,int r,int l,int r,int lim)

if(l == l && r == r)

int mid = (l+r)/2;

if(mid >= r)

else if(mid < l)

else

else if(a.v < b.v)

return a; }}

//更新線段樹,加入新點

int maxans = 10000000; //取乙個最大值第一次執行演算法的時候是不會有影響的

void add(int root,int p,int l,int r)

int mid = (l+r)/2;

if(p <= mid) add(root*2+1,p,l,mid);

else add(root*2+2,p,mid+1,r);

node a = node[root*2+1];

node b = node[root*2+2];

if(a.v == b.v) a.num += b.num;

else if(a.v < b.v) a = b;

node[root] = a;

}int main()

int cntx = 0,cnty = 0;

map::iterator it;

for(it = mapx.begin(); it != mapx.end(); it++)

for(it = mapy.begin(); it != mapy.end(); it++)

int x,y;

for(int i = 0;i < n; i++)

mapans;

build(0,0,cntx-1);

for(int i = 0;i < cnty; i++)

for(int j = 0;j < heady[i].size(); j++)

} it = ans.end();

it--;

if(q == 1)

for(int j = 0;j < heady[i].size(); j++)

}it = ans.end();

it--;

*/cout今天收到電子證書0.28%,大概15名吧。有滿分的,也在預料之中!只怪當時太自信,沒有想清楚問題。

前四題100,第五題40分。資料說了50%是求最值,我感覺能拿450的,複雜度是沒問題的,具體就不深究**錯了了。

先求出最大值,然後知道最大值maxv以後,重新計算一遍,此時的目標是求數量。

方法是對於線段樹中記錄的v值球min(v,maxv).這樣就能把最大值都統計出來,並且不用擔心少算了。

對於第四題錯誤的同學,我想用鄰接表或者vector是不會爆記憶體的。請考慮一下問題

1. if(flag[be.v]) continue; 這個判斷新增了嗎 這個是為了防止計算cost得到偏小值

2.if(flag[en.v] == 0 && dist[en.v] >= en.c) 這個判斷呢 = 號是必須加的哦。

第八次作業

練習題 1 怎麼查出通過 from xx import xx導 的可以直接調 的 法?在test package資料夾中建立 init py檔案,裡邊什麼都不需要編輯。在 中把test package的檔案的路徑加入到python直譯器可以搜尋到的路徑列表中,這裡就用到了python的包sys模組 ...

第八次作業

用python實現k均值演算法,鳶尾花花瓣長度資料做聚類並用散點圖顯示。import numpy as np 隨機生成乙個陣列 x np.random.randint 1,100,20,1 y np.zeros x.shape 0 dtype int k 3iris length 1.4,1.4,1...

第八次作業

問題 答案這個作業屬於那個課程 c語言程式設計ii 這個作業要求在 我在這個課程的目標是 更加熟練掌握markdown語法的相關用法 這個作業在那個具體方面幫助我實現目標 更加熟練的使用markdown,對本週知識總結 參考文獻 pta常見問題解析,c語言程式設計 1.pta實驗作業 1.1 求整數...