基础算法模板

基础算法模板

1.离散化
vector<int>alls;
int find(int x)
{
    return lower_bound(alls.begin(),alls.end(),x)-alls.begin()+1;
}
int main()
{
    sort(alls.begin(),alls.end());
    alls.erase(unique(alls.begin(),alls.end()),alls.end());    
    return 0;
}
2.高精度
vector<int> transform(string s)
{
    vector<int>a;
    int len=s.length();
	for(int i=len-1;i>=0;i--) a.push_back(s[i]-'0');
    return a;
}
vector<int> transform(int x)
{
    vector<int>a;
    while(x)a.push_back(x%10),x/=10;
    return a;
}
void print(vector<int> a)
{
    int sze=a.size();
    for(int i=sze-1;i>=0;i--)
        printf("%d",a[i]);
    puts("");
}
vector<int> min(vector<int> a,vector<int> b)
{
    if(a.size()<b.size())return a;
    if(a.size()>b.size())return b;
    int len=a.size();
    for(int i=len-1;i>=0;i--)
    {
        if(a[i]>b[i])return b;
        if(a[i]<b[i])return a;
    } 
    return a;
}
vector<int> max(vector<int> a,vector<int> b)
{
    if(a.size()<b.size())return b;
    if(a.size()>b.size())return a;
    int len=a.size();
    for(int i=len-1;i>=0;i--)
    {
        if(a[i]<b[i])return b;
        if(a[i]>b[i])return a;
    }
    return b;
}
bool compare(vector<int> a,vector<int>b)//a>=b
{
	if(a.size()!=b.size())return a.size()>b.size();
	for(int i=a.size()-1;i>=0;i--)
		if(a[i]!=b[i])return a[i]>b[i];
	return 1;
}
vector<int>add(vector<int> a,vector<int> b)
{
	if(a.size()<b.size())return add(b,a);
	vector<int>ans;
	int t=0;
	for(int i=0;i<a.size();++i)
	{
		t+=a[i];
		if(i<b.size())t+=b[i];
		ans.push_back(t%10);
		t/=10;
	}
	if(t) ans.push_back(t);
	return ans;
}
vector<int>sub(vector<int>a,vector<int>b)
{
	vector<int>ans;
	int t=0;
	for(int i=0;i<a.size();++i)
	{
		t=a[i]-t;
		if(i<b.size())t-=b[i];
		ans.push_back((t+10)%10);
		if(t<0)t=1;
		else t=0;
	}
	while(ans.size()>1&&ans.back()==0)ans.pop_back();
	return ans;
}
vector<int>mul(vector<int>a,long long b)
{
    
	vector<int>ans;
	long long t=0;
	for(int i=0;i<a.size();++i)
	{
		t+=a[i]*b;
		ans.push_back(t%10);
		t/=10;
	}
	while(t)ans.push_back(t%10),t/=10;
	while(ans.size()>1&&ans.back()==0)ans.pop_back();
	return ans;
}
//高精度乘高精度特别慢
vector<int>mul(vector<int>a,vector<int>b)
{
    vector<int>ans;
    int len_b=b.size();
    for(int i=len_b-1;i>=0;i--)
    {
        ans=mul(ans,10);
        vector<int>tmp=mul(a,b[i]);
        ans=add(ans,tmp);
    }
    return ans;
}
vector<int>div(vector<int>a,int b,int &r)
{
    vector<int>c;
    r=0;
    for(int i=a.size()-1;i>=0;i--)
    {
        r=r*10+a[i];
        c.push_back(r/b);
        r%=b;
    }
    reverse(c.begin(),c.end());
    while(c.size()>1&&c.back()==0)c.pop_back();
    return c;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值