首当其冲的是用随机数的做法
可能不是新做法……
虽然但是,谁能帮我在时间上优化一下 😛
#include<iostream>
#include<random>
using namespace std;
template <typename T>
T irange(T lb, T ub) //这个函数用于随机生成一个lb~ub的整数
{
random_device rd;
seed_seq seed{rd(), rd(), rd(), rd(), rd(), rd()};
mt19937 rng(seed);
uniform_int_distribution<T> uniDist(lb, ub);
return uniDist(rng);
}
int main()
{ //整体思想就是用随机数逐步缩小范围,直至找到答案
int a,b,upp=-1000000001,low=-1000000001,t;
cin>>a>>b;
if(a>b)
swap(a,b);
while((upp==-1000000001 || low==-1000000001) && t!=a+b)
{ //这个循环用来确定初始的随机范围
if(upp==-1000000001)
{
if(low==-1000000001)
t=irange(b,1000000001);
else
t=irange(low,1000000001);
}
else if(low==-1000000001)
t=irange(b,upp);
else
t=irange(low,upp);
if(t<a+b)
low=t;
else if(t>a+b)
upp=t;
}
if(t==a+b)
{ //根据while的判断条件,有这种可能
cout<<t<<'\n';
return 0;
}
while(t!=a+b)
{ //逐步寻找
t=irange(low,upp);
if(t<a+b)
low=t;
else if(t>a+b)
upp=t;
}
cout<<t<<'\n';
return 0;
}
题目传送门
原题题解
《A+B Problem》
惨痛的提交记录
再附一个能AC的queue的做法(其他数据结构也差不多):
#include<iostream>
#include<queue>
using namespace std;
queue<int> q;
int t,ans=0;
int main()
{
while(cin>>t)
q.push(t);
while(!(q.empty()))
{
ans+=q.front();
q.pop();
}
cout<<ans<<'\n';
return 0;
}
AC记录
本文来源洛谷,是我的原创文章,后续可能持续更新