結論popcnt(x^y)
和popcnt(x)+popcnt(y)
的奇偶性相同。
然後就是popcnt
為奇數的乘為偶數的。預處理一下\(2^\)次方以內的popcnt
,直接\(o(1)\)算就行。
就是求有多少個等差子串行。
方程很好寫,\(f[i]\)表示以\(i\)結尾的等差子串行個數,\(f[i] = \sum_^i f[j]*[a[i]-a[j]=d]\),列舉一下公差就行了。這裡要注意公差可能有正有負,不要一起列舉(我就在這錯的)
#include #include #include typedef long long ll;
const int n = 1010;
const ll ha = 998244353;
const int m = 40010;
ll s[m], f[n], a[n], n, ans, mx;
void calc(ll d)
}int main()
ans = ans - mx * 2 * n % ha + ha;
ans %= ha;
printf("%lld\n", ans);
return 0;
}
衝突就是乙個子集關係。而子集關係又是偏序的。「偏序集最小反鏈覆蓋等於最長鏈」。所以建乙個子集關係的dag跑乙個最長路就行了。然後就是有乙個虛點的技巧,每個集合只與比它少乙個元素的集合連邊,這樣點數是\(o(2^k)\)的,邊數是\(o(k2^k)\)的。跑最長路的時候真點是\(1\)虛點是\(0\)就行了。
#include #include const int n = (1 << 21);
const int m = n * 21;
int hd[n], to[m], nxt[m], w[n], cnt;
int f[n], rd[n], rn[n], tot[n];
int n, k, a[n];
inline void adde(int x, int y)
int main()
for (int i = (1 << k) - 1; i >= 0; --i)
}int ans = 0;
for (int i = (1 << k) - 1; i >= 0; --i)
ans = std::max(ans, f[i]);
}puts("1");
printf("%d\n", ans);
for (int i = 1; i <= n; ++i)
for (int i = 1; i <= ans; ++i)
return 0;
}
咕。 LGR 054 洛谷10月月賽II
luogu 成功咕掉codeforces round 517的後果就是,我 mbox 依舊沒有寫出來。mbox mbox 為 0 的乘上 mbox 為 1 的就是答案。因為兩個數異或以後二進位制位 1 的個數的奇偶性不會變。至於計算 mbox 預處理到根號,o 1 計算即可。include incl...
洛谷10月月賽II
這道題考了矩陣旋轉 其實很考驗推公式的能力和 能力 這裡有個小技巧 可以設 x,y 為原點,然後去推公式,然後實際操作中橫座標加上x,縱座標加上y就好了。順時針 i,j j,i 逆時針 i,j j,i include define rep i,a,b for register int i a i b...
LGR 052 洛谷9月月賽II(加賽)
題解 沒打。ab題滿世界都過了應該沒什麼意思 c題是個比較有意思的思維題 先看了題解才會的。我們考慮這麼一件事情 沒鑰匙的人出門後 門一定是開著的 他進來的時候,門一定是開著的 其他時候,一定門能關著比較好 但是這個東西並不是很好維護,因為可能重複算 我們考慮重新排個序 我們把a在b前面的那個排在他...