今日,考试难度为WC难度,但是有原题导致我没能控制住自己去搜了题解,并且抄了代码,就这样无畏的说出来,也是对自己的批判,也是对自己的警示,鄙视自己,警告自己。
被YJQ怒D之后,自己找老师认错,并且开通这个博客,来记录下自己仅剩不多的OI生活,本博客不会发表任何有关CDQZOI的原创题题解,但可能会挂出自己的题与题解,也会挂出BZOJ等处题解,并且以此博客为戒,将不再抄题解不再抄代码,真正提高自己~
顺带一提,今日T1 bzoj 1488
#include<cstdio>
#include<algorithm>
using namespace std;
#define maxn 10100
#define MOD 10007
int fac[maxn],size[maxn],num[maxn];
int ans;
int cnt,n;
inline int Pow(int a,int b)
{
int base = a,retnow = 1;
while (b)
{
if (b & 1) retnow = retnow * base % MOD;
base = base * base % MOD;
b>>=1;
}
return retnow;
}
inline int gcd(int a,int b) {return b == 0 ? a : gcd(b,a%b);}
void init()
{
fac[0] = 1;
for (register int i = 1 ; i <= n ; ++i)
fac[i] = fac[i-1] * i % MOD;
}
inline void dfs(int now,int left)
{
if (!left)
{
int retnow = 0,bot = 1;
for (register int i = 1 ; i <= cnt ; ++i)
{
retnow += ((num[i]-1)*num[i]/2 % MOD * size[i] % MOD + size[i]/2 * num[i] % MOD) % MOD;
for (register int j = i + 1 ; j <= cnt ; ++j)
retnow += gcd(size[i],size[j])*num[i] % MOD *num[j] % MOD;
}
for (register int i = 1 ; i <= cnt ; ++i)
bot = bot * Pow(size[i],num[i]) % MOD * fac[num[i]] % MOD;
bot = Pow(bot,MOD-2) * fac[n] % MOD;
ans = (ans + Pow(2,retnow) * bot % MOD) % MOD;
}
if (now > left) return;
dfs(now+1,left);
for (register int i = 1 ; i * now <= left ; ++i)
{
size[++cnt] = now,num[cnt] = i;
dfs(now+1,left - i * now);
cnt--;
}
}
int main()
{
#ifdef VictorXie
freopen("graph.in","r",stdin);
#else
freopen("graph.in","r",stdin);
freopen("graph.out","w",stdout);
#endif
scanf("%d",&n);
init();
dfs(1,n);
ans = ans * Pow(fac[n],MOD-2) % MOD;
printf("%lld\n",ans);
}
常数优化失败系列,并且此代码并非原创..再次抱歉