zoukankan      html  css  js  c++  java
  • [Shoi2017]分手是祝愿

    题链

    我们可以从大到小搞一搞,那么就有50分了。

    然后我们可以证明,这个方案是最优方案脑残选错几次再把选错的几次取消。

    因为在每个点最多选一次的情况下解唯一。

    那么就可以对最优方案列DP,然后PaPaPa。

    #include<bits/stdc++.h>
    #define mo 100003
    #define pb push_back
    #define LL long long
    using namespace std;
    int n,k,a[mo];
    LL inv[mo],f[mo],ans,anw;
    vector<int> v[mo];
    int  main () {
        freopen("trennen.in","r",stdin);
        freopen("trennen.out","w",stdout);
        scanf("%d %d",&n,&k);
        for (int i=1;i<=n;i++) scanf("%d",a+i);
        inv[1]=1;
        for (int i=2;i<mo;i++) inv[i]=(mo-mo/i)*inv[mo%i]%mo;
        for (int i=1;i<=n;i++) 
         for (int j=i;j<=n;j+=i)  v[j].pb(i);
        for (int i=n;i;i--) if (a[i]){
            for (int j=v[i].size()-1;~j;j--) a[v[i][j]]^=1;
            anw++;
        }
        if (anw<=k) {
            for (int i=1;i<=n;i++) (anw*=i)%=mo;
            printf("%d
    ",anw); return 0;}
        f[n]=1;ans=k;
        for (int i=n-1;i>k;i--) f[i]=(1+inv[i]*(1+f[i+1])%mo*(n-i))%mo;
        for (int i=max(k+1,2);i<=anw;i++) ans+=f[i]; ans%=mo;
        for (int i=1;i<=n;i++) (ans*=i)%=mo;
        printf("%lld
    ",ans); return 0;
    }
  • 相关阅读:
    chrome中打开 swf下载的问题
    爱对人比爱上人更重要
    ActiveMQ集群
    ActiveMQ相关API
    ActiveMQ持久化
    ActiveMQ处理模式
    ActiveMQ
    JMS与消息队列
    微服务设计、拆分原则
    web常用服务架构
  • 原文地址:https://www.cnblogs.com/rrsb/p/8480886.html
Copyright © 2011-2022 走看看