洛谷 P3750 [六省联考2017]分手是祝愿

Posted Achen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了洛谷 P3750 [六省联考2017]分手是祝愿相关的知识,希望对你有一定的参考价值。

传送门

题解

技术分享图片
//Achen
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<vector>
#include<cstdio>
#include<queue>
#include<cmath>
const int N=100000,mod=100003;
#define For(i,a,b) for(int i=(a);i<=(b);i++)
#define Rep(i,a,b) for(int i=(a);i>=(b);i--)
typedef long long LL;
typedef double db;
using namespace std;
int n,k,a[N],cnt;
LL rs,f[N],inv[N];
vector<int>vc[N];

template<typename T>void read(T &x)  {
    char ch=getchar(); x=0; T f=1;
    while(ch!=-&&(ch<0||ch>9)) ch=getchar();
    if(ch==-) f=-1,ch=getchar();
    for(;ch>=0&&ch<=9;ch=getchar()) x=x*10+ch-0; x*=f;
}

void solve() {
    For(i,1,n) 
        For(j,1,n/i) 
            vc[i*j].push_back(i); 
    Rep(i,n,1) if(a[i]) {
        int up=vc[i].size();
        For(j,0,up-1) 
            a[vc[i][j]]^=1;
        cnt++;
    }
    rs=cnt;
    if(cnt>k) {
        rs=k;
        f[n]=1; inv[1]=inv[0]=1;
        For(i,2,n) inv[i]=(mod-mod/i*inv[mod%i]%mod)%mod;
        Rep(i,n-1,k) 
            f[i]=(((LL)n-i)*inv[i]%mod*(f[i+1]+1)%mod+1)%mod;
        For(i,k+1,cnt) rs=(rs+f[i])%mod;
    }
    For(i,1,n) rs=rs*i%mod;
    printf("%lld\n",rs);
}

int main() {
    read(n); read(k);
    For(i,1,n) read(a[i]);
    solve();
    return 0;
}
View Code

 

以上是关于洛谷 P3750 [六省联考2017]分手是祝愿的主要内容,如果未能解决你的问题,请参考以下文章

[BZOJ4872][六省联考2017]分手是祝愿(期望DP)

六省联考2017 分手是祝愿

[六省联考2017]分手是祝愿

解题:2017六省联考 分手是祝愿

[六省联考2017]分手是祝愿

[BZOJ4872][六省联考2017]分手是祝愿