Hash Function 牛客網多校

2021-08-21 20:58:20 字數 1341 閱讀 5883

這題竟然卡memset.. 一開始t了以為陣列開小了 就往大了搞..

首先是判矛盾 如果i位置上的乙個數ary[i] 本來應該在ary[i]%n=j處 那j到i之間肯定不能有負數 字首和判斷一下

如果暫時沒矛盾 那就將從j到i-1的位置都向i連一條邊 因為ary[i]這個數會出現在i這個位置就是因為j到i-1都被別的數占了 這個過程用線段樹優化 然後拓撲排序判環 同時把佇列帶上優先順序 因為題目要求字典序最小

至於線段樹建圖後的度數關係 一開始想的是提前記錄下線段樹每個節點對應的區間長度 但其實和區間長度沒有一點關係 因為子區間度數不為零 那父區間也不可能被遍歷

還有就是如果佇列中有非線段樹葉節點(即代表區間長度大於1的節點)的話 要先把這些節點彈出然後鬆弛其他點 因為可能會有更小的符合拓撲關係的數被這些非葉節點蓋住

#include #include #include #include using namespace std;

struct node1

;struct node2

int id;

int val;

};node1 edge[6400010];

int ary[200010],pre[200010],ans[200010],mp1[200010],mp2[1600010],first[1600010],degree[1600010];

int n,num,tot,cnt;

inline void addedge(int u,int v)

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

addedge(2*cur,cur);

addedge(2*cur+1,cur);

m=(l+r)/2;

build(l,m,2*cur);

build(m+1,r,2*cur+1);

}inline void update(int pl,int pr,int tar,int l,int r,int cur)

m=(l+r)/2;

if(pl<=m) update(pl,pr,tar,l,m,2*cur);

if(pr>m) update(pl,pr,tar,m+1,r,2*cur+1);

}void toposort()

update(p,i-1,i,0,n-1,1);

}else if(p>i)

update(p,n-1,i,0,n-1,1);

if(i>0) update(0,i-1,i,0,n-1,1);}}

if(flag) toposort();

else printf("-1\n");

}return 0;

}

牛客網 華為機試 020 牛客網

密碼要求 1.長度超過8位 2.包括大小寫字母.數字.其它符號,以上四種至少三種 3.不能有相同長度超2的子串重複 說明 長度超過2的子串 一組或多組長度超過2的子符串。每組佔一行 如果符合要求輸出 ok,否則輸出ng 示例1 021abc9000 021abc9abc1 021abc9000 02...

牛客網 乳酪

題目很簡單,中文題。複製了 乳酪之間距離不用管,只要開個並查集維護就好了,另外需要選好幾個點作為起點幾個點作為終點。o n 2 的建圖。感覺可以平面掃瞄。有空去試試。以下 ac includeusing namespace std const int maxn 1e5 5 define ll lon...

牛客網 A 招生

第一行,三個正整數n,m,p.後面n行,每行兩個正整數數a i,b i a i b i 分別表示第i個人的高考分和校測分。一行乙個數,表示答案 小a高考至少要考多少分。輸入6 3 750 700 530 683 625 703 620 699 623 710 538 654 599 輸出 inclu...