2019summer系列 第十場

2021-09-25 10:21:29 字數 2093 閱讀 5293

請叫我掉分小王子,嘿嘿嘿~

用寬搜,把每個#加入佇列,記錄step就好了~

//暴力真的會超時,www

//不明白自己的輸入輸出**有問題。。就是會wa,換成cin就好了。。

大概有兩種辦法:從前往後算和從後往前算。

首先,行列狀態是不互相影響的,所以可以變成一維的。

如果是從前往後,就需要計算每個人上下左右的步數的字首和,並相互抵消,看看抵消之後會不會出邊界~

如果是從後往前,就是倒著計算,從乙個點開始,乙個人想把這個點通過到處走成乙個盡可能大的區間,另乙個人想盡可能讓點留在區間裡,然後最後如果x落在區間裡,就相當於走不出去,否則就是走得出去。

移走乙個節點上的硬幣,其實就相當於把樹的直徑減少1或者2,當直徑為1的時候,移硬幣的人會輸(因為他沒辦法把硬幣一下子拿完)。所以就~

#include

#define ll long long

using

namespace std;

int a,b,n,l,dis[

200100

],s;

vector<

int> g[

200100];

void

dfs(

int u,

int f)

intmain()

dfs(1,

0);for

(int i=

1;i<=n;i++)if

(dis[i]

>dis[s]

) s=i;

dfs(s,0)

;for

(int i=

1;i<=n;i++

) l=

max(l,dis[i]-1

);if(l %3==

1) cout <<

"second"

"first"

}

和之前某一道題很像哦!

正反求兩遍,從s到各個點的距離,從n到各個點的距離。

然後對於每兩個點i、j,如果

s

−>i的

距離+t

−>j的

距離

s->i的距離+t->j的距離

s−>i的

距離+t

−>j的

距離和s

−>j的

距離+t

−>i的

距離

s->j的距離+t->i的距離

s−>j的

距離+t

−>i的

距離都大於s到t

的最短距

離−

1s到t的最短距離-1

s到t的最短

距離−1

,就可以修建公路!

二分答案+差分~

#include

#define ll long long

using

namespace std;

ll n,r,k,a[

500500

],b[

500500

],o,sum[

500500

],ss[

500500

],ans,x=

9223372036854775807ll

,y,mid,kk;

void

makesum()

intmain()

for(ll i =

1ll;i <= n;i ++

) sum[i]

= a[i]

+sum[i-

1ll]

,x =

min(x,sum[i]);

y = x+k;

while

(x <= y)

ss[i]

= ss[i-1]

+a[i]

+b[i];}

if(kk <

0ll) y = mid-

1ll;

else

} cout << ans << endl;

return0;

}

2019summer系列 第12場

給定乙個真分數p q p q 請你求出它的小數部分都包括0 9中的哪些數字。例如1 2 0.5,只包含數字5 1 3 0.33333 只包含數字3,1 7 0.142857142857 包含數字124578。input 兩個整數p和q,1 p q 1000000 output 從小到大輸出小數部分出...

2019summer系列 第四場

鎕鎕鎕 乙個貪心的小伙。嗯,那麼是需要用貪心了。把卡片按ai排序,取最大的ai所在的卡片,然後後邊的兩兩配對,取bi較大的卡片。注意從區域性到全域性!直接全域性是不可能的!榶榶榶 數論。記所有位的數字的和為s,它的最小非1因子為ans1 記位數為n,那麼n位1等於 10 n 1 9 10 n 1 9...

2019summer系列 第六場

zzy的神奇橫跳真是太神奇啦!btw,好好理解下質因數分解!b a 1k a 2l a 3m an b a1 k a2 l a3 m an b a1k a2l a3m an?所以影響b的個數的,就只是k m l 中,最小的啦!zzy666 include define ll long long us...