牛客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,一開始任何兩個點之間都沒有邊連線。之後,他們兩個想在...