本題目的意思是給出m個 (f1 , f2, ... fm) 置換,一些置換丟失,讓求有多少種組合,可以使得 f1( f2(... fm(i))) =i (1<=i<=n) 對多有的i都成立;
這樣問題可以轉換為若任意確定一些丟失的置換,而保留乙個丟失的置換fi, 有 x*fi*y=i; fi =(x的逆)*(y的逆)所以,有唯一解,所以個數為記-1的個數為cnt
那麼結果(n!)^(cnt-1),本題目有特殊情況要注意.
#include#include#include#include#include#include#include#include#include#include #include#define pb push_back
#define rep1(i,j,k) for(int i=(j);i<=(int)k;i++)
#define per1(i,j,k) for(int i=(j);i>=(int)k;i--)
#define lowbit(x) ((x)&(-(x)))
#define fi first
#define se second
#define pii pair#define vi vectorusing namespace std;
typedef long long ll;
const int n = 110;
const int mod = 1e9+7;
int n,m,f[n][n],cnt;
void read()
rep1(j,2,n) scanf("%d",&f[i][j]);
}}void solve();
if(f[i][1]==-1) continue;
rep1(j,1,n) }
}if(cnt == 0)
}printf("%d\n",ok);
return ;
}ll ji=1;
rep1(i,2,n) ji=ji*i%mod;
ll res=1;
rep1(i,1,cnt-1) res=res*ji%mod;
printf("%d\n",(int)res);
}int main()
return 0;
}
hdu 5399 數學推理
題目鏈結 題意 給你m個函式f1,f2,fm 即所有的x 對應的f x 已知其中一部分函式的函式值,問你有多少種不同的組合使得所有的i 1 i n 滿足f1 f2 fm i i 對於函式集f1,f2,fm and g1,g2,gm,當且僅當存在乙個i 1 i m j 1 j n fi j gi j ...
Acdream Xor 簡單數學
給定乙個集合a,乙個集合b,a,b元素個數相等,然後問是否存在乙個數x使得a中的元素均與這個數進行按位異或操作後的結果為b集合,如果存在輸出最小的數,不存在輸出 1。思路 由於給定的n為奇數,所以能夠根據二進位制位的最右邊位確定唯一的分組,然後只需要判定這個分組是否合理即可。分組是這樣劃分的,如有a...
簡單數學函式
簡單數學函式 1 題目描述 已知函式f x x2 2 2x根據輸入的x值計算f x 運算結果不超過int範圍,x 0 輸入輸入多組測試資料,每組一行為x值 輸出每個測試輸出資料一行 x int input 輸入x if x 0 y x 2 2 2 x print y 題目描述 已知函式,輸入a b的...