栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

CF897B Chtholly‘s request题解

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

CF897B Chtholly‘s request题解

题目传送门

题意就是求出前 k 个长度为偶数的回文数的和,并输出其模 p 的结果。

思路

此题如果用暴力枚举的方法的话一定是过不了的,所以要换一种方法来优化。

回文数应该都知道,就是由一个数和它的倒过来的数拼接而成,又因为奇数加奇数为偶数,偶数加偶数也为偶数,所以任何一个数的回文数均为偶数长度,依照这个规律,直接按顺序找出 zcy 数即可。

还要注意的是,毕竟需要一个累加器,所以还是要开 long long 的,并且时刻注意取模。

Code
#include
#include
#include
#include 
#define ll long long
using namespace std;
ll k,p,u,ans;
inline ll read()//快读优化 
{
	ll s=0,w=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){
		if(ch=='-') w=-1;
		ch=getchar();
	} 
	while(ch>='0'&&ch<='9'){
		s=s*10+ch-'0';
		ch=getchar();
	}
	return s*w;
} 
void work()
{
	for(ll i=1;i<=k;i++){//枚举前k个数,都符合要求 
		ll t=i,q=0,o=1;
		while(t){
			q=q*10+t%10;//求倒过来的数 
			t/=10; 
			o*=10;//用于回文数的拼接 
		}
		ll sum=i*o+q;//拼接 
		ans=ans%p+sum;//累加取模 
	}
}
int main()
{
	k=read(),p=read();
	work();
	printf("%lld",ans%p);//为了保险,输出时再模一次 
	return 0;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1019474.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号