牛客OI月賽12 提高組題解

2022-03-26 21:06:10 字數 2777 閱讀 4822

牛客oi月賽12-提高組

當天晚上被\(loli\)要求去打了某高階oj部分原創的模擬賽,第二天看了牛客的題覺得非常清真,於是就去寫了

不難發現現場寫出\(260\text\)並不需要動腦子,而且\(260\text\)甚至還有\(rk2\),感覺沒打非常吃虧

a.小w的進製轉換

大概理解一下就是詢問\(1\)到\(n\)裡有多少個數的二進位制表示是反回文形式的,即對稱位置是相反的,比如\(1001,101010\)

之後根據題意,這個反回文的二進位制串長度必須是偶數(因為長度為奇數的串對稱中心和對稱中心不相反)

也不難發現這個反回文串確定了前一半後面就確定了

考慮列舉這個反回文的串的長度,顯然長度小於\(n\)的長度的串,我們只需要讓最高填\(1\),最低位填\(0\),之後除去最高位的前\(\frac\)隨便填即可

對於長度等於\(n\)的串,還是最高填\(1\),最低位填\(0\),除去最高位的前\(\frac\)位填乙個嚴格小於\(n\)的前\(\frac\)位的數,這樣就能保證嚴格小於\(n\)

之後再特判一下前\(\frac\)位和\(n\)的前\(\frac\)位相等時的時候,反對稱過去的數是否超過\(n\)

**好像寫得有點醜了

#include#define re register

#define ll long long

#define max(a,b) ((a)>(b)?(a):(b))

#define min(a,b) ((a)<(b)?(a):(b))

ll b[65];

ll n,ans;

inline void calc(int bit)

int a[64];int tot;

inline int solve()

inline void calc()

ll k=0;

for(re ll j=1;j<=tot;++j)

k|=b[j],k<<=1ll;

k>>=1ll;ans=k;

if(!tot) ++ans;else ans+=solve();

}continue;

}if(i>0) calc(i+1);

}std::cout<b.小doge的快樂陽光跑

題意:給一張圖,求乙個權值和路徑最小的移動序列,使得移動序列包含兩個給定的子串行。

發現點數只有\(10^3\),邊數也只有\(10^4\),圖相當稀疏,所以完全可以跑\(n\)遍單源最短路,求出所有點對的之間的最短路

之後搞乙個\(dp\)就完事了,設\(dp_\)表示當前在第\(1/2\)個子序列的第\(i\)個位置,另乙個子串行已經經過了前\(j\)個位置

轉移顯然,就是列舉一下下乙個點去**

#include#define re register

#define ll long long

#define mp std::make_pair

#define max(a,b) ((a)>(b)?(a):(b))

#define min(a,b) ((a)<(b)?(a):(b))

inline int read()

typedef std::pairpii;

const int maxn=1e3+5;

struct ee[maxn*20];

int d[maxn][maxn];

int n,m,num,head[maxn],vis[maxn],a[maxn],b[maxn],a,b;

inline void add(int x,int y,int w)

ll dp[2][105][105];

std::priority_queue,std::greater> q;

inline void dij(int s)

}}int main()

const int maxn=1e5+5;

const int bit=30;

struct seg b[2][maxn];

int n,a[maxn],c[maxn],cnt,tot,ans;

int rt[2][maxn],son[maxn*32][2],d[maxn*32];

inline int max(int a,int b)

inline int min(int a,int b)

int query(int p1,int p2,int x,int w)

return now;

}void solve(int l,int r)

for(re int i=mid;i>=l;--i)

for(re int i=1;i<=lenl;++i) b[1][i].x^=(b[1][i].mn^b[1][i].mx);

for(re int i=1;i<=lenr;++i) b[0][i].x^=(b[0][i].mn^b[0][i].mx);

cnt=0,tot=0;int now=lenl;

for(re int i=lenr;i;--i)

if(tot)

} for(re int i=1;i<=tot;i++) rt[0][i]=rt[1][i]=0;

cnt=0;tot=0;now=lenr;

for(re int i=lenl;i;--i)

if(tot)

} for(re int i=1;i<=tot;i++) rt[0][i]=rt[1][i]=0;

}int main()

牛客OI周賽14 普及組全部題解

eg 好久不見的普及組題目,自信滿滿以為自己ak了,結果c題莫名被卡常 後來開了氧氣優化就過了,我一直以為氧氣優化評測機會自己開不用手動開 d題公式精度問題被卡,最後rk14,btw牛客一場上綠還是很高興的嘿嘿嘿。傳送門題意 統計乙個字串裡有多少個不同的字元。題解 map或者set隨便搞。inclu...

牛客OI周賽15 普及組部分題解

b.三角形 給定n個盒子,每個盒子中有一定數量的寶物,現在你每次可以從乙個盒子中拿取乙個寶物,這樣就會有很多種不同的價值和結果。現在問你前k小的價值結果的和是多少?n 100,k 10000,假設盒子中最多寶物數量為m,保證k n m 10000。寶物價值不超過100.首先這個題容易被資料範圍誤導,...

牛客OI周賽5 提高組 B 可愛 星空

嘻嘻嘻 當你看向她時,有細碎星辰落入你的眼睛,真好。小可愛 在乙個繁星閃爍的夜晚,卿念和清宇一起躺在郊外的草地上,仰望星空。星語心願,他們,想把這片星空的星星,連成一棵漂亮的樹,將這美好的景色記錄下來。現在,天上共有n顆星星,編號分別為1,2.n,一開始任何兩個點之間都沒有邊連線。之後,他們兩個想在...