做法:看到下標 \(xor\) 這種情況就想 \(fwt\),可是半天沒思路,於是放棄了。。其實這個 \(n\) 瘋狂暗示啊。設未知數向量為 \(x\),列一下方程組就可以發現有: $$b[k] = \sum_ a[i]·x[j]$$ 做法就顯然了吧,把\(a\)和\(b\)分別\(fwt\),對應相除然後反變換即可。表示前天才學的\(fwt\),就不會使了。。
#include #define rep(i,a,b) for(int i=a;i<=b;++i)
typedef long long ll;
const int mod = 1e9+7;
const int n = 262144+10;
using namespace std;
inline int add(int x,int y)
inline int sub(int x,int y)
int n;
ll a[n],b[n],inv2;
ll q_pow(ll a,ll b)
return ans;
}void fwt_xor(ll a,int n,int on) ^ip[i] + (i-1)^m·\prod_^ip[i]·(1-p[1]) + \sum_^i ((i-j+1)^m + dp[j-2])·\prod_^i p[k]·(1-p[j-1])$$要注意區間的概率需要判$0$,在這卡了好久。
```c++
#include #define rep(i,a,b) for(ll i=a;i<=b;++i)
typedef long long ll;
const ll mod = 1e9 + 7;
const int n = 1100;
using namespace std;
ll q_pow(ll a,ll b)
return ans;
}ll inv(ll x)
ll n,m,p[n],inv1,dp[n],pp[n],s0[n];
ll p(int l,int r)
int main()
dp[1] = p[1];
rep(i,2,n)
}dp[i] %= mod;
}dp[n]%=mod;
printf("%lld\n",(dp[n]+mod)%mod);
return 0;
}```\]
2020牛客暑期多校訓練營(第九場)
總結 這一場過了a題,之前用c 各種寫,但是沒想到用 三行 就解決了問題,還是需要學習很多很多。fi 一級目錄 土撥鼠在第1個宿舍,橙子在第n個宿舍。這n個宿舍間有n 1條路並且長度都為1,土撥鼠從第1個房間去第n個宿舍,速度為1m s 橙子從第n個宿舍追趕土撥鼠,速度為2m s。二分時間 t 然後...
2019牛客暑期多校訓練營(第九場)
d knapsack cryptosystem 折半搜尋,晚上又去看了挑戰程式設計,對於時間複雜度高的情況,可以通過犧牲空間來降低時間複雜度。先把前半部分所有可以組合的情況列舉出來,然後對於後半部分依次列舉,那麼複雜度變化為o 2 36 o 2 18 2 18log 18 顯然就可做了,折半的裸題。...
2019牛客暑期多校訓練營(第九場)
給定 p 1000000007 有兩個數x,y,其中 x leqslant y leqslant p x y equiv b mod p x times y equiv c mod p 求 x,y的值 二次剩餘 1 二次剩餘參考資料1 2 二次剩餘參考資料2 知道 x y 和 x times y 那...