大数模板暴力跑,水10分 = =!
代码如下:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<string>
#include<cstring>
#include<cstdlib>
using namespace std;
typedef long long ll;
const int N=1e5+20;
int sum[N];
bool fjian;
string u[6]={"314882150829468584","427197303358170108","1022292690726729920","1698479428772363217","2006101093849356424","2009731336725594113"};
string a[N];
int bj(string x,string y)
{
int l1=x.size();
int l2=y.size();
if(l1<l2)return -1;
if(l1>l2)return 1;
for(int i=0;i<l1;i++)
{
if(x[i]>y[i])
return 1;
if(x[i]<y[i])
return -1;
}
return 0;
}
string jia(string x,string y)
{
memset(sum,0,sizeof(sum));
int l1=x.size();
int l2=y.size();
for(int k=0,i=l1-1;i>=0;k++,i--)
sum[k]=x[i]-'0';
for(int k=0,i=l2-1;i>=0;k++,i--)
sum[k]+=y[i]-'0';
int mx=max(l1,l2);
for(int i=0;i<mx;i++)
{
sum[i+1]+=sum[i]/10;
sum[i]%=10;
}
if(sum[mx]!=0)
mx++;
x.clear();
for(int i=mx-1;i>=0;i--)
x+=sum[i]+'0';
return x;
}
string jian(string x,string y)
{
fjian=0;
memset(sum,0,sizeof(sum));
if(bj(x,y)==-1)
{
fjian=1;
string t=x;
x=y;
y=t;
}
else if(bj(x,y)==0)
{
x.clear();
x+='0';
return x;
}
int l1=x.size();
int l2=y.size();
for(int k=0,i=l1-1;i>=0;k++,i--)
sum[k]=x[i]-'0';
for(int k=0,i=l2-1;i>=0;k++,i--)
{
if(sum[k]<y[i]-'0')
{
sum[k]+=10;
sum[k+1]--;
}
sum[k]-=y[i]-'0';
}
x.clear();
int k=l1;
while(!sum[--k]);
for(int i=k;i>=0;i--)
x+=sum[i]+'0';
return x;
}
string cheng(string x,string y)
{
string a,b;
memset(sum,0,sizeof(sum));
int l1=x.size();
int l2=y.size();
if(l1==1&&x[0]=='0')
return x;
if(l2==1&&y[0]=='0')
return y;
for(int i=l1-1;i>=0;i--)
a+=x[i]-'0';
for(int i=l2-1;i>=0;i--)
b+=y[i]-'0';
for(int i=0;i<l1;i++)
for(int j=0;j<l2;j++)
sum[i+j]+=a[i]*b[j];
int k=l1+l2+1;
for(int i=0;i<=k;i++)
{
sum[i+1]+=sum[i]/10;
sum[i]%=10;
}
while(!sum[--k]);
x.clear();
for(int i=k;i>=0;i--)
x+=sum[i]+'0';
return x;
}
string chu(string x,string y)
{
if(bj(x,y)==0)
{
x.clear();
x+='1';
return x;
}
if(bj(x,y)==-1)
{
x.clear();
x+='0';
return x;
}
string a;
a+='1';
while(bj(x,cheng(y,a))!=-1)
a+='0';
a.erase(a.end()-1);
int mx=a.size();
for(int i=0;i<mx;i++)
{
int j;
for(j=1;j<=10;j++)
{
a[i]=j+'0';
if(bj(x,cheng(y,a))==-1)
break;
}
a[i]=j-1+'0';
}
return a;
}
string yu(string x,string y)
{
string shang=chu(x,y);
string ans=jian(x,cheng(y,shang));
return ans;
}
string fun(int x)
{
string y;
int t=0;
while(x)
{
t=t*10+x%10;
x/=10;
}
while(t)
{
y+=t%10+'0';
t/=10;
}
return y;
}
string f(string x)
{
return yu(yu(x,u[5]),"2019");
}
int main()
{
int n,q,l,r;
cin>>n>>q;
for(int i=1;i<=n;i++)
a[i]=fun(i);
for(int z=0;z<q;z++)
{
string s="0";
scanf("%d%d",&l,&r);
for(int i=l;i<=r;i++)
{
s=jia(s,f(a[i]));
}
cout<<s<<endl;
string te=yu(s,"5");
int t=te[0]-'0';
for(int i=l;i<=r;i++)
a[i]=cheng(a[i],u[t]);
}
return 0;
}