牛客網暑期ACM多校訓練營(第一場)

2022-08-01 17:30:20 字數 2631 閱讀 3657

考慮0和1的分界線,1和2的分界線,發現問題可以轉化為兩條不互相穿過的路徑的方案數(可重疊),題解的做法就是把一條路徑斜著平移,然後就轉化為不可重疊了。現在考慮,如何計算從(0,0)道(n,m)不相交不可重疊的方案數,一條從(0,1)出發到達(n-1,m),一條從(1,0)出發到達(n,m-1),將他們乘起來的結果還包含相交的情況,於是再減去從(0,1)到(n,m-1)與(1,0)到(n-1,m)的方案數。

#include #define rep(i,a,b) for(int i=a;i<=b;++i)

#define pb push_back

#define mp make_pair

#define fr first

#define sc second

typedef long long ll;

const int n = 1e5 + 7;

const ll mod = 1e9 + 7;

using namespace std;

ll n,m,cc[2005][2005];

ll c(int n,int m)

int main()

return 0;

}

關鍵在於把這個矩陣,考慮成乙個鄰接矩陣,然後發現乙個每個點有兩條邊,且無自環,可以有重邊。這張圖實際上就是,每個點都屬於唯一的乙個環,環的大小大於等於2。求這種圖的方案數。好像第一類斯特靈數?還得遞推搞一下。詳見:大佬的推導

#include #define rep(i,a,b) for(int i=a;i<=b;++i)

#define per(i,a,b) for(int i=a;i>=b;--i)

#define pb push_back

typedef long long ll;

const int n = 1e5 + 7;

using namespace std;

ll dp[n],n,m;

int main()

else

}return 0;

}

\(n!\) 列舉與 \(g1\) 同構的圖,在 \(g2\) 中找到相應的邊,如果 \(m1\) 條邊都可以匹配到,則將這種方案中用到的邊壓成乙個64位二進位制數,放到set裡去重。另一種思路是,出現重算的情況就是,這個同構的圖與自身的圖相同,即使用這些點的對映,形成的新圖與原圖一致,這種自同構的情況要從答案中除去。

#include typedef unsigned long long ll;

const ll seed = 31;

const ll mod = 1e9 + 7;

inline int read()

while(c>='0'&&c<='9')

return x*f;

}using namespace std;

int n,m1,m2,g[11][11],ph[11];

pairp[1111];

int main()

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

for(int i=1;i<=n;++i) ph[i]=i;do}

if(cnt == m1)s.insert(hs);

}while(next_permutation(ph+1,ph+1+n));

printf("%d\n",(int)s.size());

}return 0;

}

先寫了分塊莫隊tle,然後寫了曼哈頓mst莫隊tle,然後分塊亂狗tle,t到終場。結束後,加了個快讀,分塊莫隊ac..。還有其他一些做法,其實把整個序列在後邊複製乙份,不就變成了單個區間詢問數字種類的模板題了。(讓快讀成為習慣。。。為何泥萌常數辣麼小

#include #define rep(i,a,b) for(int i=a;i<=b;++i)

#define pb push_back

#define mp make_pair

#define fr first

#define sc second

typedef long long ll;

const int n = 1e5 + 7;

inline int read()

while(c>='0'&&c<='9')

return x*f;

}using namespace std;

int n,q,a[n];

struct ppq[n];

int b,belong[n];

void build()

bool cmp(pp a, pp b)

int sum=0,num[n];

void update(int p,int d)

bool cmp1(pp a,pp b)

int main()

sort(q+1,q+1+q,cmp);

int l=0, r=n+1;sum = 0;

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

sort(q+1,q+1+q,cmp1);

for(int i=1;i<=q;++i)printf("%d\n",q[i].ans);

}return 0;

}

牛客網暑期ACM多校訓練營(第一場)

j different integers 題 意 給你乙個數值元素為1到n,大小為n的陣列,q個詢問每次輸入 l,r 求a1 a2 a3 al,ar ar 1 ar 2 an中不同元素的個數 輸入範圍 1 n q 1e5 1 ai n 1 li,ri n the number of test cas...

牛客網暑期ACM多校訓練營(第一場)

rank solvedab cdef ghij 67 338 3 10o o o o 當場通過 賽後通過 尚未通過 solved by chelly chelly s solution 比賽的時候是oeis找規律過的 我們把n m的矩陣畫出來並建立座標系,左下角的點是 0,0 右上角的點是 n,m ...

牛客網暑期ACM多校訓練營(第九場)

做法 看到下標 xor 這種情況就想 fwt 可是半天沒思路,於是放棄了。其實這個 n 瘋狂暗示啊。設未知數向量為 x 列一下方程組就可以發現有 b k sum a i x j 做法就顯然了吧,把 a 和 b 分別 fwt 對應相除然後反變換即可。表示前天才學的 fwt 就不會使了。include ...