T2 这样为什么WA 50?

先bfs预处理出1号点通过三种操作不经过[-1e7,1e7]以外的点能到达的所有点的集合S,并记录集合内每个点的pre
每次询问先处理x直到x∈S,再不断找pre直到x=1
处理方法:如果x%2==0,x/=2,否则x=3*x+1;
#include<cstdio>
using namespace std;
typedef long long LL;
const int N=1e7;
int pr[N*2+5],Q[N*2+5],h,t,q,d,l;
LL out[1505];
bool vs[N*2+5];
inline LL Z(LL x) {return x<0?-x:x;}
void push(int v,int x)
{
	if(Z(v)<=N)
		if(!vs[v+N])  Q[++t]=v,pr[v+N]=x,vs[v+N]=1;
}
int main()
{
	scanf("%d%d%d",&q,&d,&l);
	Q[h=t=1]=vs[1+N]=1;
	while(h<=t)
	{
		int x=Q[h++];push(x*2,x);
		if(Z(x)<=l&&Z(x-d)<=l)  push(x-d,x);
		if((x%3+3)%3==1)  push((x-1)/3,x);
	}
	while(q--)
	{
		LL x;scanf("%lld",&x);t=0;
		while(Z(x)>N||!vs[x+N])
		{
			out[++t]=x;
			if(x%2==0)  x/=2;
			else  x=x*3+1;
		}
		while(1)
		{
			out[++t]=x;
			if(x==1)  break;
			x=pr[x+N];
		}printf("%d",t-1);
		while(t--)  printf(" %d",out[t+1]);
		puts("");
	}return 0;
}
全部评论
RE (TLE?) 的数据 1 100000 1000 -401
点赞 回复 分享
发布于 2021-10-12 22:38

相关推荐

不愿透露姓名的神秘牛友
07-16 12:18
点赞 评论 收藏
分享
不要停下啊:大二打开牛客,你有机会开卷了,卷起来,去找课程学习,在牛客上看看大家面试笔试都需要会什么,岗位有什么需求就去学什么,努力的人就一定会有收获,这句话从来都经得起考验,像我现在大三了啥也不会,被迫强行考研,炼狱难度开局,啥也不会,找工作没希望了,考研有丝丝机会
点赞 评论 收藏
分享
06-26 17:24
已编辑
宁波大学 golang
迷失西雅图:别给,纯kpi,别问我为什么知道
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务