建议加强数据
查看原帖
建议加强数据
731016
lijinghui楼主2024/9/24 17:07

又是 CCF 拿脚造数据的一天

我把题意理解错了,以为能在第 nn 个点等车任意时间(路程时间不用为 kk 的倍数),打成了一个骗分代码。

代码如下:

#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
#define mp make_pair
const int N=1e5+10;
int head[N],top,dis[N],vis[N];
priority_queue< pair<int,int> >q;
struct EDGE
{
	int v,nxt,t;
}edge[N];
void add(int u,int v,int t)
{
	top++;
	edge[top].v=v;
	edge[top].t=t;
	edge[top].nxt=head[u];
	head[u]=top;
}
void dijkstra(int s)
{
	memset(dis,0x3f3f,sizeof(dis));
	dis[s]=0;
	q.push(mp(0,s));
	while(!q.empty())
	{
		int u=q.top().second;
		q.pop();
		if(vis[u])continue;
		vis[u]=1;
		for(int i=head[u];i;i=edge[i].nxt)
		{
			int v=edge[i].v,t=edge[i].t;
			if(dis[v]>max(t+1,dis[u]+1))
			{
				dis[v]=max(t+1,dis[u]+1);
				q.push(mp(-dis[v],v));
			}
		}
	}
}
signed main()
{
	ios::sync_with_stdio(0);
	cin.tie(NULL);cout.tie(NULL);
	int n,m,k;
	cin>>n>>m>>k;
	if(k==0ll)
	{
		cout<<-1;
		return 0;
	}
	for(int i=1;i<=m;i++)
	{
		int u,v,t;
		cin>>u>>v>>t;
		add(u,v,t);
	}
	dijkstra(1ll);
	if((int)(ceil(1.0*dis[n]/k)*k)>=1e9)cout<<-1;
	else cout<<(int)(ceil(1.0*dis[n]/k)*k);
	return 0;
}

结果拿了 9090 分,这样一个骗分,理应不超过 6060 分,真的应该加强数据了。

2024/9/24 17:07
加载中...