http://acm.hdu.edu.cn/showproblem.php?pid=6600
题意:给你一个数x,允许你多次询问yi,然后回答你x xor yi 是否等于yi,询问尽量少的次数以保证能求出xi是几,求出这样询问次数最少的询问方案数。
最优方案就是对每位进行询问,每次只让yi的一位是1,一共n个二进制位。方案数为n!
#include<bits/stdc++.h> using namespace std; #define ll long long const int maxn=1e6+10; const int mod=1e6+3; ll a[maxn]; int main() { a[1]=1; for(int i=2;i<=mod;i++) { a[i]=a[i-1]*i%mod; } ll n; while(~scanf("%lld",&n)) { if(n>=mod) printf("0 "); else printf("%lld ",a[n]); } return 0; }