互動題訓練1

2021-09-11 18:04:57 字數 2436 閱讀 9805

一道經典的題目便是猜數字。

codeforces 1011d - rocket

不過,這裡面的人有可能撒謊,即大於有可能說成小於,小於有可能說成大於。

好在,它們說真假話為n個乙個週期。

即第i

ii次說假話當且僅當imo

dn

i\ mod\ n

imod

n時說假話。

真話同理。

猜的數在[1,1e9]內。n⩽30

n\leqslant 30

n⩽30

,需要60次內猜出來。

我們可以先採取n次每次問1,得出真謊話週期。

後面二分即可。

codeforces 862d和codeforces 714d均是這個經典思路的應用。

在[ioi 2018]highway中,二分的偉大神力被體現地淋漓盡致。

題意:

有個n個點,m條邊的無向圖。n

⩽90000

n\leqslant 90000

n⩽90000m⩽

130000

m\leqslant 130000

m⩽1300

00有兩種權值a,b(a

a<

b)。你需要詢問出起點s,t。

每次你可以給每條邊賦上a或b的權值,然後詢問s,t的最短路。

用不超過50次詢問確定s,t。

首先,詢問邊權權全為a時的最短路。(以下我們把邊權全為a時的最短路簡稱為最短路)

然後,對邊的編號二分,找出一條在最短路上的邊。

記為e1-e2

那麼,用bfs找出e1,e2在原圖上的最短路樹。

可以看出,s,t到e1,e2的距離互不相同,並且s,t會選擇較近的那個點。

那麼e1,e2會分別形成一棵樹,互不相交。

分別在e1,e2的樹上bfs序上二分,找出s和t。

注意到,若兩棵樹的大小為s1,s2。

則需要詢問的次數為o(⌈

log2

s1⌉+

⌈log

2s2⌉

+⌈lo

g2m⌉

+1

)o(\lceil log_2s1\rceil+\lceil log_2s2 \rceil+\lceil log_2m \rceil+1)

o(⌈log

2​s1

⌉+⌈l

og2​

s2⌉+

⌈log

2​m⌉

+1)由於s1+

s2⩽n

s1+s2\leqslant n

s1+s2⩽

n故最多詢問次數為2⌈l

og2n

⌉+⌈l

og2m

⌉−

12\lceil log_2n \rceil+\lceil log_2m \rceil-1

2⌈log2

​n⌉+

⌈log

2​m⌉

−1即最多50次。

#include "highway.h"

#include#include#include#include#includeusing namespace std;

typedef long long ll;

int n,m,a,b;

ll ans;

#define v 90010

#define e 130010

struct edgeedge[e];

int head[v],v[e<<1],w[e<<1],nxt[e<<1],tot=0;

int val[e];

inline void add_edge(int s,int e,int t)

int dis1[v],dis2[v],fr1[v],fr2[v],q1[v],q2[v];

int q[v],hd,tl,cnt1,cnt2;

void bfs(int s,int *dis,int *fr,int *q)

memset(fr1,-1,sizeof(fr1));

memset(fr2,-1,sizeof(fr2));

bfs(edge[l].a,dis1,fr1,q1);

bfs(edge[l].b,dis2,fr2,q2);

tot=0;memset(head,0,sizeof(int)*n);

for(int i=0;i>1;

for(int i=0;i>1;

for(int i=0;ival[ed]=a;

for(int i=1;i<=mid;++i)val[fr2[q2[i]]]=a;

for(int i=1;iif(ask()!=ans)l=mid+1;

else r=mid;

}int t=q2[l];

answer(s,t);

}

軒轅互動面試1題

下午去軒轅互動面試了,可是第一輪就被刷了。沒辦法,沒有那本事。我以前做的乙個演算法的複雜度為nlog n 晚上回來好好想了想,終於想出了乙個o n 的演算法 public class distinctcount while end 0 data end data end 1 start end if...

動態規劃訓練題1

小可可選修了基礎生物基因學。教授告訴大家 super samuel 星球上 kitty貓的基因的長度都是 2 的正整數次冪 全是由兩種不同的基因單元組成的。這兩種不同的基因單元分別記成 0 和 1,於是 kitty 貓基因可以寫成乙個 01 串表示式 為了便於分析和降低資料儲存量,教授發明了 abc...

codeforce刷題 互動題

打codeforces第二週 又遇到了很多有意思的題型,可自己還是太菜了 寫份部落格記錄一下憨憨的自己 做的第一道互動題,記錄一下 this is an interactive problem.這是一道互動題 你通過列印問題詢問他,他給你結果,讓你找到最終的陣列 需要清除快取區,才能保證正確,否則就...