HW 2017 12 17可禾大佬神題

2022-04-03 00:08:57 字數 2750 閱讀 4897

好不容易搞來的題目,不寫一寫怎麼行呢。

不過難度真心不高(一小時k掉),都是老題+暴力題,沒有歐洲玄學。

再說一句,這試卷是葉可禾出的吧。

t1 好老的題目,看到有多組資料我還怕了,以為有更流弊的演算法。沒想到減了資料範圍。

首先把邊sort一遍,因為要求,max-min最小,所以列舉最短邊,然後向後找到第一條滿足聯通的邊即可。

聯通的話通過並查集就可以實現。

(沒有聯通要輸-1,題目裡沒說)

code

#include#include

using

namespace

std;

const

int n=205,m=1005,inf=2147483647

;struct

data

e[m];

intfather[n],i,j,n,m,ans,s,t,q;

bool

flag;

inline

void read(int &x)

inline

void write(int

x)inline

int comp(data a,data b)

inline

int getfather(int k)

intmain()

}if (e[j].s-e[i].se[i].s;

}if (ans==inf) puts("

-1"); else write(ans),putchar('\n'

); }

return0;

}

t2 看這資料範圍,看著猥瑣的要求最大值。這就是一道傳統的o(n^2) dp;

用f[i][j]表示取到第i行第j列時最大值,so

f[i][j]=max f[i-1][j-1]+a[i][j] (選a[i][j]這個點)

f[i][j-1](不選a[i][j]這個點)

注意第i行的花縱座標至少要從i開始列舉

因為dp順序和讀入順序相同,所以可以一邊讀一邊做

code

#includeusing

namespace

std;

const

int n=805

;int n,m,x,f[n][n],ans=-2147483647

,i,j;

inline

void read(int &x)

while (ch>='

0'&&ch<='

9') x=x*10+ch-'

0',ch=getchar();

x*=flag;

}inline

int max(int a,int b)

intmain()

printf("%d

",f[n][m]);

return0;

}

(剛開始把讀優打錯了)

t3 感覺是一道很老的題目。

只需要維護乙個佇列,當隊尾與隊頭之間的距離大於d時彈出即可。

每次ans+=tail-head即可。

注意將座標排序一遍。

code

#include#include

using

namespace

std;

const

int n=1e6+5

;int n,d,ans,i,s[n],q[n],head=1,tail=1

;inline

void read(int &x)

intmain()

printf("%d

",ans);

return0;

}

t4 最值得思考也最值得罵人的一道題。

看到題目和最近打過的一道並查集補集的題目很想像(luogu 關押罪犯)然後沒有猶豫地敲了並查集。

然後發現還要輸出方案這一茬。

刪光,又發現照樣可以套染色的板子,然後奮不顧身地敲了乙個bfs版本的,但發現只能直接跳出但不能統計個數。

所以只好用超級不熟悉的dfs版本了。

**很簡單(很容易背),用乙個陣列表示這個數是否使用,再用乙個陣列記錄前面到這個點有多少條邊(有邊就不能加入隊裡)。

之後回溯尋找即可(玄學複雜度)

code

#include#include

using

namespace

std;

const

int n=1005

;vector

a[n];

intcol[n],n,m,i,x,y,ans,q[n],tot;

bool

v[n],p[n];

inline

void read(int &x)

inline

void

copy()

inline

void dfs(int

k)

if (!q[k])

dfs(k+1);}

intmain()

dfs(1);

printf(

"%d\n

",ans);

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

if (p[i]) printf("

%d ",1); else printf("

%d ",0

);

return0;

}

201712 1最小差值

問題描述 試題編號 201712 1 試題名稱 最小差值 時間限制 1.0s 記憶體限制 256.0mb 問題描述 給定n個數,請找出其中相差 差的絕對值 最小的兩個數,輸出它們的差值的絕對值。輸入格式 輸入第一行包含乙個整數n。第二行包含n個正整數,相鄰整數之間使用乙個空格分隔。輸出乙個整數,表示...

201712 1 最小差值 python

問題描述 給定n個數,請找出其中相差 差的絕對值 最小的兩個數,輸出它們的差值的絕對值。輸入格式 輸入第一行包含乙個整數n。第二行包含n個正整數,相鄰整數之間使用乙個空格分隔 輸出格式 輸出乙個整數,表示答案。樣例輸入 51 5 4 8 20 樣例輸出 1樣例說明 相差最小的兩個數是5和4,它們之間...

CCF CSP 最小差值(201712 1)

問題描述 給定n個數,請找出其中相差 差的絕對值 最小的兩個數,輸出它們的差值的絕對值。輸入格式 輸入第一行包含乙個整數n。第二行包含n個正整數,相鄰整數之間使用乙個空格分隔。輸出格式 輸出乙個整數,表示答案。樣例輸入 515 4820樣例輸出 1樣例說明 相差最小的兩個數是5和4,它們之間的差值是...