这是一道极其容易tle的题目
k<=10e5,p<=10e9
必须注意对时间的控制
附上自己的tle代码。。【捂脸】
#include<stdio.h>
#include<string.h>
#include<math.h>
int main()
{
int m,k;
while(~scanf("%d %d",&k,&m))
{
long long sum=0;
while(k)
{
for(int i=11;;i++)
{
int x=0;
int o=i;
while(o!=0)
{
o/=10;
x++;
}
int len=x;
int temp=0;
if(len%2==0)
for(int j=0;j<len/2;j++)
{
int h=pow(10,j+1);
int y=pow(10,len-1);
if(i/y==i%h)
temp=1;
else
temp=0;
}
else
for(int j=0;j<(len-1)/2;j++)
{
int h=pow(10,j+1);
int y=pow(10,len-1);
if(i/y==i%h)
temp=1;
else
temp=0;
}
if(len%2==0&&temp==1)
{
sum+=i;
k--;
if(k==0) break;
}
}
}
printf("%lld\n",sum%=m);
}
return 0;
}
算法真的不是很好,在test3就爆了qwq。
最后附上ac代码,参考自@—cyh—
#include<stdio.h>
#include<string.h>
#include<math.h>
int k,m;
long long zcy[100005];
void init()
{
int cnt=0;
for(int i=1;i<=100000;i++)
{
long long tmp=i;
int m=i;
while(m){
tmp=tmp*10+m%10;
m/=10;
}
zcy[++cnt]=tmp;
}
}
int main()
{
int m,k;
init();
while(~scanf("%d %d",&k,&m))
{
long long sum=0;
for(int i=1;i<=k;i++){
sum+=zcy[i];
sum%=m;
}
printf("%lld\n",sum%=m);
}
return 0;
}