关于C艹中的计时函数
  • 板块灌水区
  • 楼主liruizhou_lihui
  • 当前回复5
  • 已保存回复5
  • 发布时间2025/2/7 23:08
  • 上次更新2025/2/8 10:50:45
查看原帖
关于C艹中的计时函数
1053122
liruizhou_lihui楼主2025/2/7 23:08

c++里面的duration_cast可以实现记录运行时所用的时间,但是这个代码

#include<bits/stdc++.h>
using namespace std;
using namespace std::chrono;
int n,m,s;
vector<int>e[100005];
set<pair<int,int>>flag;
int ind[100005];
int a[100005];
queue<int>q;
double ans[100005];
vector<int>qwq;
int main()
{
	auto beg = high_resolution_clock::now();
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin>>n>>m>>s;
	for(int i=1;i<=n;i++)
		cin>>a[i];
	for(int i=1;i<=m;i++)
	{
		int u,v;
		cin>>u>>v;
		if(u==v)
			continue;
		if(flag.find(make_pair(u,v))!=flag.end())
			continue;
		flag.insert({u,v});
		e[u].push_back(v);
		ind[v]++;
	}
	for(int i=1;i<=n;i++)
		if(ind[i]==0)
			q.push(i);
	while(!q.empty())
	{
		int u=q.front();
		q.pop();
		qwq.push_back(u);
		for(int v:e[u])
		{
			ind[v]--;
			if(ind[v]==0)
				q.push(v);
		}
	}
	if(qwq.size()!=n)
	{
		cout<<"NO";
		return 0;
	}
	for(int i=1;i<=n;i++)
		ans[i]=0;
	ans[s]=1;
	for(int i=0;i<qwq.size();i++)
	{
		int u=qwq[i];
		int out=e[u].size();
		if(a[u]==0)
			continue;
		if(out>0)
			for(int v:e[u])
				ans[v]+=ans[u]/out;
	}
	double Ans=0;
	
	for(int i=1;i<=n;i++)
		if(a[i]==0)
			Ans+=ans[i];
	auto end=high_resolution_clock::now();
	if(duration_cast<milliseconds>(end-beg).count()>150)
	{
		cout<<"NO";
		return 0;
	}
	if(Ans-0.5>1e-9)
		cout<<"YES";
	else
		cout<<"NO";
	return 0;
}

里面的一部分实现了如果运行时间>150毫秒就会输出NO

有一个题有一个点WA了,那个点的时间时最慢的200+毫秒,但是为什么不管把检验时间的改成YES和NO都会WA

2025/2/7 23:08
加载中...