好不容易搞來的題目,不寫一寫怎麼行呢。
不過難度真心不高(一小時k掉),都是老題+暴力題,沒有歐洲玄學。
再說一句,這試卷是葉可禾出的吧。
t1 好老的題目,看到有多組資料我還怕了,以為有更流弊的演算法。沒想到減了資料範圍。
首先把邊sort一遍,因為要求,max-min最小,所以列舉最短邊,然後向後找到第一條滿足聯通的邊即可。
聯通的話通過並查集就可以實現。
(沒有聯通要輸-1,題目裡沒說)
code
#include#includeusing
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
#includeusingnamespace
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#includeusing
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#includeusing
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,它們之間的差值是...