基础算法模板
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)
{
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;
}