20170925「切題如切菜杯」水題模擬賽 第二彈

2022-08-16 14:57:10 字數 4442 閱讀 4498

給出一張有n個點和m條雙向邊的圖,要求求出1到n的次短路的長度。一條邊可以多次通過。

輸入格式:

第一行為兩個整數n和m。接下來的m行每行三個整數ai,bi,vi,分別表示這條路連著的兩個點和他的長度。

輸出格式:

乙個整數,表示次短路的長度。

樣例輸入

樣例輸出

4 41 2 100

2 4 200

2 3 250

3 4 100

樣例解釋:

最短:1->2->4。

次短:1->2->3->4。

資料範圍:

對於 100%的資料:1<=n、vi

<=5000,1<=m<=100000。

solution:

裸的不能再裸的最短路,但用spfa會被卡,就上dij**

#include#include

#include

#include

using

namespace

std;

const

int maxn = 5000+100

; const

int inf = 0x7fffffff

; typedef pair

p;

struct

edge;

vector

g[maxn];

intn,m,ans;

intdis1[maxn],disn[maxn];

void dijkstra(int src,int

dis)

} }

} void

solve()

} } int

main()

solve();

printf(

"%d\n

",ans);

return

0;

}

lgl有一根長為n的木板。現在他想要把它砍成四段長度為整數的木板來做乙個四邊形,請問他有多少種不同的砍法?注意:四段長度為1、1、2、1和四段長度為1、2、1、1算兩種砍法。

輸入格式:

第一行為乙個整數 n,表示木板的長度。

輸出格式:

乙個整數,不同的砍法數量。

樣例輸入

樣例輸出

樣例解釋:

1122,1212,1221,2112,2121,2211。

資料範圍:

對於100%的資料:1<=n<=2500。

solution:

dp[i][j]表示長度為i時分成j段的方案數,隨便轉移。

這是正解,當然因為本題比較特殊,附上兩個暴力**。

正常暴力

#includeusing

namespace

std;

intmain()

printf(

"%lld\n

",sum);

}

優化暴力(from巨神lzb)

#includeusing

namespace

std;

intmain()

printf(

"%lld,

",ans);

} }

正解

#include #include 

intn,mid;

int dp[2501][5

];int

getint()

while(ch>='

0'&&ch<='9'

)

return x*f;}

int min(int a,intb)

intmain()

}printf("%d

",dp[n][4

]);

return0;

}

yyh有n道題要做。但是由於他上課做某些事,導致他一題都不會做,只好請lgl代打。lgl為了買自己心愛的坦克,他做第i題要收兩筆錢:一筆在yyh叫他做題當天收,另外一筆在叫他做題的第二天收。yyh每天結束的時候都會把剩下的所有錢花光,然後再從父親lrb處得到m元零花錢用來請lgl做題(也就是說,第一天的時候yyh是沒有錢請lgl做題的,每一天用來請lgl做題所用的錢都是前一天lrb給的)。而且,yyh做的題目難度是循序漸進的:就算強如lgl,在做第i題之前也要先把第1到i-1題全部做完。請問yyh將所有題目做完並且把所有錢都付給lgl的最小天數。

輸入格式:

第一行為兩個整數m、n,接下來的n行每一行都有兩個數ai

和bi,分別表示lgl做第i題所收的兩筆錢。

輸出格式:

乙個整數,表示最小天數。

樣例輸入

樣例輸出

100 5

40 20

60 20

30 50

30 50

40 40

樣例解釋:

第二天做1、2兩題,第三天做3、4兩題,第五天做5。在第六天的時候所有錢都付完。

資料範圍:

對於100%的資料:1<=n<=300,1<=ai

、bi<=m<=1000。

solution:dp[i][j]表示前i天做了j題後該天可能剩下的最多的錢的數量。那麼dp[i][j]可以轉移到dp[i][j+1]、dp[i][j+2]……只要滿足剩下的錢不少於0並且下個月的錢夠還即可。同時可以算出dp[i+1][j+1],dp[i+1][j+2]……最後輸出滿足dp[i][m]存在值的最小i。

#include #include 

#define inf 0x3f3f3f3f

intn,m,t1,t2;

int a[301],b[301

];int dp[501][301

];int

getint()

while(ch>='

0'&&ch<='9'

)

return x*f;}

int max(int a,intb)

intmain()}}

i++;

}printf("%d

",i);

return0;

}

每天bbs都要從家裡經過城市中的一段路到學校刷五三。城市中一共有n個路口和m條雙向道路,每條雙向道路都連線著兩個路口ai

、bi且有一定的時間花費vi

。bbs家編號為1,學校編號為n。今天,bbs由於個人衛生症候群導致他很遲才離開家,他想用膜法改變k條道路的長度使通過其的時間花費vi

變為0。現在他問你改變道路長度之後他到學校的最小時間花費是多少?

輸入格式:

第一行為三個整數n、m、k,接下來的m行每行三個整數ai,bi,vi,分別表示這條路連著的兩個路口和通過其所用的時間。

輸出格式:

乙個整數,表示bbs到學校的最小時間花費。

樣例輸入

樣例輸出

4 4 1

1 2 10

2 4 10

1 3 1

3 4 100

樣例解釋:

更新3->4的道路,最短路線為1->3->4,用時為1+0=1。

資料範圍:

對於100%的資料:1<=n<=10000,1<=m<=50000,1<=k<=20,1<=vi

<=1000000。

#include #include 

#include

#include

#define inf 0x3f3f3f3f

struct

path

;struct

node

};std::vector

g[10001

];std::priority_queue

q;int

m,n,k,ans;

int dist[10001][21

];bool vis[10001][21

];int

getint()

while(ch>='

0'&&ch<='9'

)

return x*f;}

int min(int a,intb)

void

dij()

);

while(!q.empty()));}

if((!vis[t.to][t2+1])&&t21]>dist[t1][t2]));}

}}}

intmain()

); g[b].push_back((path));

}dij();

ans=inf;

for(int i=0;i<=k;i++) ans=min(ans,dist[n][i]);

printf("%d

",ans);

return0;

}

2020 03 14模擬賽16(第二題)

題目描述 fj想計算他的n 1 n 1000 只奶牛的名字的好聽度,每個奶牛的名字是乙個長度不超過1000的英文本母串。他建立了乙個好名字的集合,數量為m 1 m 100 每個好名字的長度不超過30,奶牛的名字中每包含乙個好名字 包含 不一定要求連續 那麼它的好聽度就加1。所有的名字都不區分大小寫,...

藍橋杯第二期模擬賽第十題

覺得網上的答案怪怪的 問題描述 小藍在乙個 n 行 m 列的方格圖中玩乙個遊戲。開始時,小藍站在方格圖的左上角,即第 1 行第 1 列。小藍可以在方格圖上走動,走動時,如果當前在第 r 行第 c 列,他不能走到行號比 r 小的行,也不能走到列號比 c 小的列。同時,他一步走的直線距離不超過3。例如,...

2020 02 13普及C組模擬賽6(第二題)

題目描述 農場主約翰養了兩群有世仇的牛,它們被稱為蒙塔戈斯家族和卡普魯特家族。蒙塔戈斯家族的成員,羅密歐,愛上了美麗的朱麗葉,但後者正好是卡普魯特家族的成員。羅密歐希望與朱麗葉約會,但不希望卡普魯特家族的其他成員發現 否則會有可怕的事情發生!羅密歐和朱麗葉希望在牧場柵欄邊一塊盡可能大的區域中相見,這...