首页 > 其他分享 >ABC 363 F - Palindromic Expression 题解

ABC 363 F - Palindromic Expression 题解

时间:2024-07-20 21:39:55浏览次数:14  
标签:10 ABC return 数列 题解 ll while 反转 Expression

下文中提到的数字都不包含 0,注意把含 0 的数字特判掉。

反转指各个数位倒过来,比如 114514 反转过后就是 415411

注意到,答案一定是这样:数列 \(a\) 的各个数字相乘,乘以一个回文,再把数列 \(a\) 倒过来,每个数反转,再相乘。

比如:2*57*184481*75*2,其中的数列 \(a\) 就是:2 57,中间的回文就是 184481

搜索,先搜两边,把一个数和把它反转后的数拼成一对,如果 \(n \mod (i\times i') =0\)(\(i'\) 是 \(i\) 反转的数),那么 \(i\) 就可以被加进数列里,然后把 \(n\) 除以 \(i\times i'\) 继续搜索,搜索出一个合法解就退出。

由于合法的对数不会太多,所以可以预处理可能出现在答案里的对,然后暴力搜索。

时间复杂度:\(O(能过)\)。

点击开 D
const int N=1099;
ll n,a[N]={},fan[1000099]={};
bool nozero(ll n) {
	while(n) {
		while(n%10==0)
			return false;
		n/=10;
	}
	return true;
}
bool ishui(ll n) {
	if(!nozero(n))
		return false;
	int a[20]={},i,j;
	while(n)
		a[++a[0]]=n%10,
		n/=10;
	for(i=1,j=a[0];i<j;++i,--j)
		if(a[i]!=a[j])
			return false;
	return true;
}
ll turn(ll n) {
	ll ans=0;
	while(n)
		ans=ans*10+n%10,
		n/=10;
	return ans;
}
ll g[1000099]={},leftans=0;
bool solve(ll n) {
	if(ishui(n)) {
		leftans=n;
		return true;
	}
	for(int i=2;i<=g[0]&&g[i]*fan[g[i]]<=n;++i)
		if(n%(g[i]*fan[g[i]])==0) {
			if(solve(n/(g[i]*fan[g[i]]))) {
				a[++a[0]]=g[i];
				return true;
			}
		}
	return false;
}
int main()
{
	ll i;
	read(n);
	for(i=1;i<=1e6;++i) {
		fan[i]=turn(i);
		if(i<=fan[i]&&n%i==0&&(n/i)%fan[i]==0&&nozero(i))
			g[++g[0]]=i;
	}
	if(solve(n)) {
		for(i=1;i<=a[0];++i)
			printf("%lld*",a[i]);
		printf("%lld",leftans);
		for(i=a[0];i;--i)
			printf("*%lld",fan[a[i]]);
		printf("\n");
	} else printf("-1\n");
	return 0;
}

标签:10,ABC,return,数列,题解,ll,while,反转,Expression
From: https://www.cnblogs.com/fydj/p/18313851/ABC363F

相关文章

  • Python学习笔记39:进阶篇(二十八)pygame的使用之按键映射及按键失效问题解决
    前言基础模块的知识通过这么长时间的学习已经有所了解,更加深入的话需要通过完成各种项目,在这个过程中逐渐学习,成长。我们的下一步目标是完成pythoncrashcourse中的外星人入侵项目,这是一个2D游戏项目。在这之前,我们先简单学习一下pygame模块。私信我发送消息python资料,......
  • CF819B Mister B and PR Shifts 题解
    题目传送门前置知识权值树状数组及应用解法由[ABC351F]DoubleSum的套路,尝试展开绝对值及\(\min,\max\)。将式子拆开有\(\begin{aligned}&\min\limits_{k=0}^{n-1}\{\sum\limits_{i=1}^{n-k}|a_{i}-(i+k)|+\sum\limits_{i=n-k+1}^{n}|a_{i}-(i-(n-k))|\}\\&=\min......
  • WebGoC题解(11) 627.传声(2019NHOI小乙)
    题目描述 小C节日旅游来到一个农场。农场主John和n个奶牛站在一条水平线上。牛的传递消息是依靠“吼”,牛的吼叫声最远可以传递的距离是50。农场主John首先通知最左边的第一条奶牛(一定会通知),然后奶牛就开始向后吼叫,后面的奶牛如果能听到(和前面吼叫的奶牛距离不超过50),就继续向......
  • 2064:【例2.1】交换值 题解
    题目链接题目描述输入两个正整数\(a\)和\(b\),试交换\(a\)、\(b\)的值(使\(a\)的值等于\(b\),\(b\)的值等于\(a\))。解题思路该题有很多种方法,例如:直接输出\(b\)和\(a\)(偷鸡方法)使用algorithm库的swap函数使用额外变量辅助位运算\(......\)但这道题目放在"运算符和表达式"......
  • CF906C Party题解
    今天来水一波题解……理解题意由于题目意思讲得很清楚,就因为懒惰直接复制了……给你一堆一对对的关系,然后每一个关系对代表两个人认识。然后你每次可以选择一个人i,让i认识的所有人都相互认识,即i把介绍自己所有的朋友给其他人。然后现在问你最少需要选择多少个这样的i,使得所有的......
  • 1005:地球人口承载力估计 题解
    题目链接题目描述假设地球上的新生资源按恒定速度增长。照此测算,地球上现有资源加上新生资源可供\(x\)亿人生活\(a\)年,或供\(y\)亿人生活\(b\)年。为了能够实现可持续发展,避免资源枯竭,地球最多能够养活多少亿人?解题思路经典的牛吃草问题,只是换了一个问法而已。可以戳这里,也......
  • openwrt之luci界面开发------问题解析
    查阅视频:我取不来名字的https://space.bilibili.com/320467466在openwrt的luci界面开发中,用到的这个E()函数,其功能是在网页界面创建各种各种视图效果,如按钮,文字等等。其原函数:functionE(){    returnL.dom.create.apply(L.dom,arguments)}这个E()函数定义实......
  • python3 安装Crypto包 出现No module named ‘Crypto‘和No module named ‘Crypto.Ut
       pycrypto、pycrytodome和crypto是一个东西,crypto在python上面的名字是pycrypto,它是一个第三方库,但是已经停止更新三年了,所以不建议安装这个库;这个时候pycryptodome就来了,它是pycrypto的延伸版本,用法和pycrypto是一模一样的;所以,我现在告诉大家一种解决方法--直接安装:pipin......
  • CF1364D Ehab's Last Corollary 题解 (构造/独立集/找最小环)
    题意给出一张n个点的无向连通图和一个常数k。你需要解决以下两个问题的任何一个:找出一个大小为\(\lceil\frack2\rceil\)的独立集。找出一个大小不超过k的环。独立集是一个点的集合,满足其中任意两点之间在原图上没有边直接相连。可以证明这两个问题必然有一个可以......
  • P3588 PUS 题解
    PUS推销我的洛谷博客。题意给出三个整数\(n,s,m\),请你构造一个整数数组\(a\)满足\(1\leqslanta_i\leqslant10^9(1\leqslanti\leqslantn)\)以及\(m\)个约束条件,或判断无解。\(a\)数组中\(s\)个数已经给出(保证合法)。\(m\)个约束条件格式如下:\(l,r,k,x_1,x_2\cd......