最后两个点11,12WA了
  • 板块P2429 制杖题
  • 楼主mooktian
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/11/3 10:39
  • 上次更新2023/11/3 15:10:36
查看原帖
最后两个点11,12WA了
890321
mooktian楼主2023/11/3 10:39

感觉思路也没问题啊,求大佬帮忙看看,代码也很短的。

#include <bits/stdc++.h>
using namespace std;
long long n,m,p[31],ans; 
const long long mod = 376544743;
void dfs(int x,int step);
int main( ) {
	cin >> n >> m;
	for(int i = 1;i <= n;i++) cin >> p[i];
	for(int i = 1;i <= n;i++) {
		dfs(i,1);
	}
	cout << ans;
	return 0;
}
void dfs(int x,int step) {//从第x个数开始,取step个数 
	long long p0 = 1;
	for(int i = x;i < x+step;i++) {
		p0 *= p[i];
		if(p0 > m) return;
	}
	long long t = m/p0;
	long long sum = ((1+t)*t/2)%mod*p0;
	sum = sum %mod;
	if(step%2 == 1) ans += sum;
	else ans -= sum;
	ans %=mod;
	if(x+step <= n) {
		dfs(x,step+1);
	}
}

2023/11/3 10:39
加载中...