1. 程式人生 > >洛谷 P3750 [六省聯考2017]分手是祝願

洛谷 P3750 [六省聯考2017]分手是祝願

splay pen log pro names ios include for lap

傳送門

題解

技術分享圖片
//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]分手是祝願