全部评论
#include<iostream> using namespace std; int main(){ int n; int count=1; int m=0; cin>>n; n=n<0?-n:n; if(n%2==0){ while(m<n){ m+=count++; } if(m%2==0){ }else{ while(m%2==1){ m+=count++; } } cout<<(count-1)<<endl; }else{ while(m<n){ m+=count++; } if(m%2==1){ }else{ while(m%2==0){ m+=count++; } } cout<<(count-1)<<endl; } }
还剩三分钟那会推导出来了,来不及血崩
算是动态规划吧。。。
我暴力指数级过了57
我直接转换成二进制然后输出长度就过了40+
是动规,要写递推
#include <iostream> #include <queue> using namespace std; int main()
{ int n; cin>>n; queue<int>q1,q2; q1.push(0); if(n==0)
{
cout<<0<<endl; return 0; } for(int i=1;i<1000;i++)
{ if(i%2)
{ while(q1.size())
{ int u=q1.front(); q1.pop(); q2.push(u+i); q2.push(u-i); if(u==n)
{
cout<<i-1<<endl; return 0; }
}
} else { while(q2.size())
{ int u=q2.front(); q2.pop(); q1.push(u+i); q1.push(u-i); if(u==n)
{
cout<<i-1<<endl; return 0; }
}
}
} return 0; }
57.14%不知道为啥,坐等大佬分享思路
我也没用动态规划,我觉得就是个公式啊,但就是只有57%,哪位大神分享一下代码啊 int n = sc.nextInt(); int i = 0,count = 0; if(n == 0)
System.out.println(0); if(n < 0){ while (i > n)
i -= ++count; if((n - i) < (i - n + count))
System.out.println(count + (n - i) * 2); else System.out.println(count + (i - n + count) * 2 - 1); }else { while (i < n)
i += ++count; if((i - n) < (n - i + count))
System.out.println(count + (i - n) * 2); else System.out.println(count + (n - i + count) * 2 - 1); }
85.87% 时间复杂度超了
没用动态规划。表示一直47%看了30分钟代码不知道为啥。
相关推荐
点赞 评论 收藏
分享
2025-12-28 19:14
哈尔滨工业大学 算法工程师 点赞 评论 收藏
分享
点赞 评论 收藏
分享
查看1道真题和解析