社区讨论

俩样例都没过,A了

P3750[六省联考 2017] 分手是祝愿参与者 5已保存回复 4

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
4 条
当前快照
1 份
快照标识符
@lo915tkz
此快照首次捕获于
2023/10/28 03:52
2 年前
此快照最后确认于
2023/10/28 03:52
2 年前
查看原帖
六省联考造的什么JB数据,这程序俩样例都没过都A了。
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+5,mod=100003;
int n,k,a[N],f[N],cnt,sum;
vector<int>fac[N];
int fpow(int a,int b){
	int ret=1;
	for(;b;b>>=1){
		if(b&1)ret=1LL*ret*a%mod;
		a=1LL*a*a%mod;
	}return ret;
}
signed main(){
	//freopen("trennen14.in","r",stdin);
	scanf("%lld%lld",&n,&k);
	for(int i=1;i<=n;i++)scanf("%lld",&a[i]);
	for(int i=1;i<=n;i++)
		for(int j=i;j<=n;j+=i)fac[j].push_back(i);
	for(int i=n;i>=1;i--)
		if(a[i]){cnt++;for(auto v:fac[i])a[v]^=1;}
	int fn=1;
	for(int i=1;i<=n;i++)fn=1LL*fn*i%mod;
	if(cnt<=k)return printf("%lld\n",1LL*cnt*fn%mod),0;
	f[n]=1;
	for(int i=n-1;i>=1;i--){
		f[i]=(1+1ll*(n-i)*fpow(i,mod-2)%mod*(f[i+1]+1)%mod)%mod;
		if(i<=cnt&&i>=k+1)(sum+=f[i])%=mod;
	}
	printf("%lld\n",1LL*(sum+k)*fn%mod);
	return 0;
}

回复

4 条回复,欢迎继续交流。

正在加载回复...