codeforces 897 B. Chtholly's request

这是一道极其容易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;
}

猜你喜欢

转载自blog.csdn.net/KyleChennn/article/details/88833778