你说得对,但是100pts样例没过……
查看原帖
你说得对,但是100pts样例没过……
564732
TimSwn090306楼主2023/7/13 10:48

100pts提交记录

不懂,样例我的程序输出4,实际应该是5

调了好久都没找到哪里有错,最后想先交一发看看能拿多少分的时候,结果AC了((

有无大佬能帮忙看看我的程序哪里有问题?

代码如下::

#include <bits/stdc++.h>
#define ll long long
#define pli pair<ll,int>
#define mkp(x,y) make_pair(x,y)
using namespace std;
const int maxn=15;
const int maxm=5e5+5;
struct edge{
	int to,next;
	ll w;
}e[maxn*maxm];
int n,tot,h[maxm];
bool vis[maxm];
ll l,r,ans,a[maxn],d[maxm];
priority_queue <pli,vector<pli>,greater<pli> > q;
inline void addEdge(int x,int y,ll z){
	e[++tot]=(edge){y,h[x],z};
	h[x]=tot;
}
inline void dijkstra(){
	memset(d,0x3f,sizeof(d));
	d[0]=0;
	q.push(mkp(d[0],0));
	while (!q.empty()){
		int now=q.top().second;
		q.pop();
		if (vis[now]) continue;
		vis[now]=true;
		for (int i=h[now];i;i=e[i].next){
			int v=e[i].to;
			if (d[v]>d[now]+e[i].w){
				d[v]=d[now]+e[i].w;
				q.push(mkp(d[v],v));
			}
		}
	}
}
int main(){
	scanf("%d%lld%lld",&n,&l,&r);
	for (int i=1;i<=n;i++) scanf("%d",&a[i]);
	sort(a+1,a+n+1);
	for (int i=0;i<a[1];i++) for (int j=2;j<=n;j++) addEdge(i,(i+a[j])%a[1],a[j]);
	dijkstra();
	for (int i=0;i<a[1];i++){
		if (r>=d[i]) ans+=(r-d[i])/a[1]+1;
		if (l>=d[i]) ans-=(l-1-d[i])/a[1]+1;
	}
	printf("%lld\n",ans);
	return 0;
}
2023/7/13 10:48
加载中...