習題日常第十練

2021-10-08 12:31:02 字數 2124 閱讀 5044

這個題的輸入比較特別,需要用流或者快讀來處理。要求最少的換乘次數,我們可以把每乙個點都當作中轉點看看,利用弗洛伊德演算法的思想,求出從1到n的最少中轉次數。具體**如下。

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define ll long long int

const

int mod=

1e9+7;

using

namespace std;

ll a[

100010

],g[

510]

[510];

intmain()

string s;

getline

(cin,s)

;for

(i=0

;i)for

(j=1

;j<=len;j++)}

for(k=

1;k<=n;k++

)for

(i=1

;i<=n;i++

)for

(j=1

;j<=n;j++)if

(g[1

][n]

>=

1e9)

cout<<

"no"

cout<[n]-

1

}

這個題主要需要通過一些點,我們可以利用迪傑斯特拉演算法求出每兩個點之間的最短路,然後通過dfs搜尋即可。但是搜尋的時候注意可能會超時,中間還用了一點雜湊。具體**如下。

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define ll long long int

const

int mod=

1e9+7;

using

namespace std;

struct node

t[200010];

int a[

100010

],g[

510]

[510

],dis[

200010

],tot=

0,b[

200010

],lp[20]

[20],pl[20]

,ans=

1000000000

,s,vis[20]

;priority_queueint,

int>

>p;

void

add(

int x,

int y,

int z)

void

dist

(int i)}}

return;}

int pz[20]

;void

dfs(

int cu,

int pr)

for(i=

1;i<=s;i++)}

return;}

intmain()

for(i=

0;i) cin>>s;

for(i=

1;i<=s;i++

) pl[0]

=0;for

(i=0

;i<=s;i++)}

dfs(1,

0); cout<}return0;

}

習題日常第十三練

這個題是個矩陣快速冪的典型題,主要難在如何找出矩陣遞推關係。具體 如下 矩陣一定要開long long include include include include include include include include include include include include in...

習題日常第十八練

這個是思維題,特別簡單。第乙個數必定是要加入天數的,之後,每乙個數只要大於它的前乙個,天數就得加上他倆的差值,因為這時候前面那個小的需要的天數不足以讓大以及以後的比這個大的消耗為0,此時先計算需要額外的大的數需要天數,然後再以此類推判斷後面的數即可。如下。include include includ...

習題日常第十九練

題目本身沒有難點,算個公式題吧。但是中間有一步操作是值得學習的,對於這個題最後的答案要除以6,但是資料規模必須邊取餘邊計算。這時候,我們就可以將餘數擴大這個需要除以的倍數,最後除。這個方法非常的巧妙,以往我們在解決問題的時候都會用到費馬小定理來解決。具體 如下。cin n m n ans n n 2...