首页 > 编程语言 >算法刷题记录:[NOIP1999]回文数

算法刷题记录:[NOIP1999]回文数

时间:2023-06-03 15:11:25浏览次数:36  
标签:&& int back -- vector NOIP1999 刷题 回文 size

题目链接

https://ac.nowcoder.com/acm/contest/19859/G

题目分析

高精度相加 + 进制转换 + 判断回文的模拟题。

AC代码

// Problem: [NOIP1999]回文数
// Contest: NowCoder
// URL: https://ac.nowcoder.com/acm/contest/19859/G
// Memory Limit: 262144 MB
// Time Limit: 2000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include <iostream>
#include <vector>

using namespace std;

int n;
string a, b;

vector<int> add(vector<int> A)
{
	vector<int> B;
	int t = 0;
	for (size_t i = 0, j = A.size() - 1; i < A.size() && j >= 0; ++ i, -- j)
	{
		t += A[i] + A[j];
		B.push_back(t % n);
		t /= n;
	}
	if (t) B.push_back(t);
	while (B.size() > 1 && B.back() == 0) B.pop_back();
    return B;
}

bool f(vector<int> B)
{
	for (size_t i = 0, j = B.size() - 1; i < B.size() && j >= 0; ++ i, -- j)
		if (B[i] != B[j]) return false;
	return true;
}

int main()
{
	cin >> n >> a;
	
	for (int i = a.size() - 1; i >= 0; -- i) b += a[i];
	
	// 字符串 -> 数字
	vector<int>	A, B;
	for (int i = a.size() - 1; i >= 0; -- i) 
		if (a[i] >= '0' && a[i] <= '9') A.push_back(a[i] - '0');
		else A.push_back(a[i] - 'A' + 10);
	
	// 用两个指针相加,结果加入B,判断B是否为回文
	int cnt = 0;
	do
	{
		B = add(A);		// 相加完后,B的值赋值给A
		A = B;
		++ cnt;
	}while(!f(B) && cnt <= 30);		// 不是回文的时候,一直循环
	
	if (cnt > 30) cout << "Impossible!" << endl;
	else cout << "STEP=" << cnt << endl; 	
}

标签:&&,int,back,--,vector,NOIP1999,刷题,回文,size
From: https://www.cnblogs.com/ClockParadox43/p/17454008.html

相关文章

  • 算法刷题记录:素数五五
    题目链接https://ac.nowcoder.com/acm/contest/19859/E题目分析一道找规律的题,我们注意33,当33的长度一样,我们只要无脑添加4和8即可。4和8的关系与33的关系:有n个33,就有n-1个4或8。在此基础之上,因为会出现a和b的33长度不相同的情况,这时候我们只要统计a和b的33个数的差就行了......
  • 2023-06-03 刷题
    练习英文描述算法56.合并区间-力扣(LeetCode)[mid,非常好展示思路]分析:Firstsorttheintervalsbystarttime,sothatwecaneasilyfindwhichintervalscanbemergedbycheckingintervalsfromlefttoright.Useoneexampletodemotheprocess.(e.g.use......
  • 2023年5月刷题记录
    2023年5月1日leetcode1376.通知所有员工所需的时间链接地址:https://leetcode.cn/problems/time-needed-to-inform-all-employees/题意:公司里有n名员工,每个员工的ID都是独一无二的,编号从0到n-1。公司的总负责人通过headID进行标识。在manager数组中,每个员工都......
  • 算法刷题记录:日历中的数字
    题目链接https://ac.nowcoder.com/acm/contest/19859/B题目分析很简单的一道数位统计的题目其中年和月是乘法原理。(固定住年和月,枚举该月有几天,所以是乘法原理)当x=0并且month<10时,月需要特判一位数的情况,是加法原理日是加法原理AC代码//Problem:日历中的数字//Cont......
  • 刷题建议
    课程安排知识点题目+1题目+2日期线性数据结构-数组15.三数之和560.和为K的子数组 11.盛最多水的容器 排序算法179.最大数75.颜色分类 1054.距离相等的条形码 扩展线性数据结构-多维数组986.区间列表的交集56.合并区间 74.搜索二维矩阵 扩展线性数据结构-特殊矩......
  • 23-05-31 刷题,两道Mid题目
    Mid-1020.飞地的数量-力扣(LeetCode)-BFS-grid分析:飞地,就是被敌人(水)包围的陆地。本题中是指不与任何border相联的1组成,只考虑四个方向。思路:换种角度,从border的1出发,总共有4个border,利用BFS遍历,初始队列中包含四个border中1的位置,然后将他们标记成其他值(例如2),这样省掉......
  • 算法刷题记录:[NOIP2017]图书管理员
    题目链接https://ac.nowcoder.com/acm/contest/19306/1050题目分析因为要求最小编号,并且该编号是以读者的编号结尾,这边直接排序+翻转,找开头的数。记录是因为看到某个大佬非常好的思路,直接对编号进行取模,就是末尾的数。如果想得到末尾的数,直接进行取模即可~~AC代码#include<......
  • 蓝桥杯 基础练习 特殊回文数(C++)
    资源限制内存限制:512.0MBC/C++时间限制:1.0sJava时间限制:3.0sPython时间限制:5.0s问题描述123321是一个非常特殊的数,它从左边读和从右边读是一样的。输入一个正整数n,编程求所有这样的五位和六位十进制数,满足各位数字之和等于n。输入格式输入一行,包含一个正整......
  • 算法刷题记录:译码
    题目链接https://ac.nowcoder.com/acm/contest/19306/1046解题思路:10进制转x进制,只要反复%x、/x即可。%x取出末尾的数字,因为末尾的数字已经取出,所以将该数字\掉可以一起算也可以循环,取模不会影响除数。AC代码#include<iostream>usingnamespacestd;intT,n;//将......
  • 刷题笔记53 动态规划14
    @目录动态规划1143.最长公共子序列1035.不相交的线53.最大子序和动态规划动态规划●1143.最长公共子序列●1035.不相交的线●53.最大子序和动态规划1143.最长公共子序列1143.最长公共子序列法1:动态规划intlongestCommonSubsequence(stringtext1,stringte......