一道經典的題目便是猜數字。
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 2s1 ⌉+⌈l og2 s2⌉+ ⌈log 2m⌉ +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 2m⌉ −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.這是一道互動題 你通過列印問題詢問他,他給你結果,讓你找到最終的陣列 需要清除快取區,才能保證正確,否則就...