2019牛客多校第七場

2022-02-24 15:12:57 字數 2871 閱讀 7842

給定乙個01串,求最少的劃分次數,使得每部分的01串都是迴圈字典序最小。

從最長的整個串貪心,暴力判斷是否是迴圈字典序最小,若是,直接輸出前面的串,然後後面的串再進行新一輪判斷。

#include using namespace std;

const int n=205;

int t;

string s;

vectorans;

bool check(string s)}}

cout << "\n";

}return 0;

}

給定乙個n次多項式,判斷能否分解。

n大於2時肯定能分解,n小於2時肯定不能分解,n等於2時韋達定理求根,若有解則說明可分解。

#include using namespace std;

typedef long long ll;

int t,n;

ll a[25];

int main(void)

if(n>2)else if(n==2)else

}else

}return 0;

}

有n種樹,每種樹有高度,數量,砍一顆的花費三種屬性,求最小的砍樹花費使得剩下的樹中最高的樹的數量嚴格大於總數量的一半。

#include using namespace std;

typedef long long ll;

#define ls i<<1

#define rs i<<1|1

#define mid (l+r)/2

const int n=1e5+50;

int n;

struct nodea[n];

bool cmp(node a,node b)else

}int main(void)

sort(a+1,a+1+n,cmp);

hp[n]=0;

pp[n]=0;

pos[n]=0;

psz[n]=0;

siz[n]=a[n].p;

for(int i=n-1;i>=1;i--)

}ll ans=1e18;

build(1,1,200);

for(int i=1;i<=n;i++)

ll tmp=pos[i];

ll ned=(sum-psz[i]+1)-2ll*siz[i];

if(ned>0)

ans=min(ans,tmp);

update(1,1,200,a[i].c,a[i].p);

}printf("%lld\n",ans);

}return 0;

}

給定乙個n和p,構造乙個能整除p的n位數。

顯然當n小於p的位數,無法構造,否則就輸出乙個p,後面補零直到n位。

#include using namespace std;

typedef long long ll;

ll p,n;

int main(void)

if(n先構造出兩個序列\(l\)和\(r\),初始化乙個空序列,然後每次加入\(l_i...r_i\),並輸出中位數。

#include using namespace std;

typedef long long ll;

const int n=2e6+50;

ll l[n],r[n];

ll x[n],y[n];

ll a[3],b[3],c[3],m[3];

int n;

struct dcz

void add(type x)

void work()

int pos(type x)

type val(int pos)

int size()

#undef type

}d;struct segtree

void pushup(int i)

void build(int i,int l,int r)

build(ls,l,mid);

build(rs,mid+1,r);

pushup(i);

}void pushdonw(int i,int l,int r)

}void update(int i,int l,int r,int ql,int qr)

pushdonw(i,l,r);

if(ql<=mid)

if(qr>mid)

pushup(i);

}//離散區間[l,r]實際代表的數sum中第k個

ll query(int i,int l,int r,ll k)

pushdonw(i,l,r);

if(sum[ls]>=k)else

}}st;

int main(void)

for(int i=1;i<=n;i++)

d.work();

int ds=d.size();

st.build(1,1,ds);

for(int i=1;i<=n;i++)

return 0;

}

給定兩個數,反轉相加後再反轉。

簽到題

#include using namespace std;

typedef long long ll;

ll a,b;

int t;

int main(void)

while(b)

ll c=aa+bb;

ll cc=0;

while(c)

printf("%lld\n",cc);

}return 0;

}

H pair 2019牛客多校第七場

傳送門 這題一直忘了補。今天沒比賽剛好補了 比賽的時候看見以為是撒高階數論計數題,然而怎麼過了這麼多人,最後沒想到是數字dp。我們知道對於位運算來說,當高位 c 或者 高位 所以從高位開始數字dp dp pos dc xc sta stb az bz 表示從最高位到pos 1位所有列舉的情況 的 值...

牛客多校第七場E Find the median

題意 每次在乙個空區間內加入 l,r 區間內所有的數,然後問每次加入後的中位數是什麼。題解 一道線段樹的題目。a 線段樹的葉子節點維護了乙個區間,這個區間是 l,r 1 為什麼是這區間?因為這樣能不重不漏的包含所有的區間,每次查詢的時候也不會漏掉,自己畫一顆線段樹基本能明白了 b 然後查詢的時候,記...

2019牛客多校第七場H Pair 數字DP

題意 給你乙個3個數a,b,c問有多少對pair i,j 1 i a,1 j b,i and j c或 i xor j c。a,b,c範圍為1e9.思路 場上一看以為是推式子加什麼篩做,無果。之後才知道是數字dp 以下思路來自學長的 orz 首先,我們可以把問題轉化為求i and j c並且 i x...