我琢磨出来的几个a+b problem的新做法

首当其冲的是用随机数的做法
可能不是新做法……
虽然但是,谁能帮我在时间上优化一下 😛

#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记录
本文来源洛谷,是我的原创文章,后续可能持续更新

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值