【AtCoder】【ARC064F】Rotated Palindromes

AtCoder从小白到大神的进阶攻略 摘自https://www.cnblogs.com/LHYLHY/p/11572011.html 在此对作者表示感谢 AtCoder从小白到大神的进阶攻略 前言 现在全球最大的编程比赛记分网站非CodeForces和AtCoder莫属了,@ezoixx130大佬已经在去年介绍过CodeForces了(传送门),那么现在我们主要谈一下AtCoder。 简介 A... 阅读详情

Description

求有多少个序列满足以下条件:
1. 序列有n位;
2. 序列的每位为1~m之间的整数;
3. 这个序列经过旋转以后可以变成一个回文串;

Solution

这是一个悲惨的故事…..想了一天多,一直在想怎么减掉不合法的,最后一怒之下瞄了一眼(真的就是瞄一眼)标程,咦标称是直接统计耶,下一瞬间:
WOC这不是大水题吗

对于每个回文串,假设它旋转了x次以后第一次变成回文的,那么它对答案就有x的贡献(转0次~转x-1次),

考虑怎样的回文串转x次会变成回文的,(先假设x为n的约数)
把n切成(n/x)段,也就是每段有x个,
如果n/x为奇数,那么,只有这(n/x)段都相同且为回文的,它转x后还是回文的,
比如:(x=3,n=9)121 121 121;
如果n/x为偶数,那么, 这一段可以为任意,保证每(2x)位为一个回文串即可,
比如:(x=2,n=8)12 21 12 21;

根据上面计算方法,可得出,一个回文串如果转x次为回文串,那么转x的约数次也为回文串,(比如:转6次变成回文的,那么转12、18次也是回文的)

我们真正要统计的是,对于每个回文串,假设它旋转了x次以后第一次变成回文的,所以要减掉重复的,
显然,如果x不为n的约数,贡献为0,

复杂度可以参考枚举子集的复杂度,即O(3x)O(3x)(大概),不会很大。

Code

#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <map>
#define fo(i,a,b) for(int i=a;i<=b;i++)
#define fod(i,a,b) for(int i=a;i>=b;i--)
#define efo(i,q) for(int i=A[q];i;i=B[i][0])
using namespace std;
typedef long long LL;
const int N=100500,mo=1e9+7;
int m,n;
int fj[N][2],fj0;
int d[N];
LL ans;
map<int,int>f;
LL ksm(LL q,int w)
{
    LL ans=1;
    for(;w;w>>=1,q=q*q%mo)if(w&1)ans=ans*q%mo;
    return ans;
}
int ss1(int q,int w,int e)
{
    if(q>w)return f[e];
    int ans=ss1(q+1,w,e);
    fo(i,1,d[q])((ans+=ss1(q+1,w,(e=e*fj[q][0])))>=mo?ans-=mo:0);
    return ans;
}
void ss(int q,int e)
{
    if(q>fj0)
    {
        LL t=(((n/e)%2?ksm(m,(e+1)>>1):ksm(m,e))-ss1(1,q,1)+mo)%mo;
        f[e]=t;
        ans=(ans+t*e)%mo;
        return;
    }
    d[q]=0;ss(q+1,e);
    fo(i,1,fj[q][1])d[q]=i,ss(q+1,(e*=fj[q][0]));
}
int main()
{
    int q,w;
    scanf("%d%d",&n,&m);
    if(n==1)return printf("%d\n",m),0;
    q=n;
    for(int i=2;i*i<=q;++i)if(q%i==0)
    {
        for(fj[++fj0][0]=i;!(q%i);++fj[fj0][1],q/=i);
    }
    if(q>1)fj[++fj0][0]=q,fj[fj0][1]=1;
    ss(1,1);
    printf("%lld\n",(ans+mo)%mo);
    return 0;
}
AtCoder初学者竞赛: 编程学习 AtCoder初学者竞赛是一个面向编程初学者的竞赛平台,提供了一系列算法和数据结构问题。该竞赛旨在帮助参赛者提高他们的编程技能,并为他们提供一个实践的机会。竞赛通常在规定的时间内进行,参赛者需要解决给定的问题,并提交他们的解答。AtCoder初学者竞赛(AtCoder Beginner Contest)是一个受欢迎的在线编程竞赛平台,旨在帮助初学者提高编程技能。本文将介绍关于AtCoder初学者竞赛的基本知识,并提供一些示例代码,帮助读者更好地理解和应用这些概念。示例代码1:计算两个整数的和。 阅读详情

相关推荐

AtCoder初学者比赛编程学习

AtCoder初学者比赛是专门为初学者设计的比赛,题目相对简单,适合新手入门。比赛通常在每个月的第一个和第三个周六举行,你可以在AtCoder网站上的比赛日历中查看确切的日期和时间。在编程学习的旅程中,参加编程竞赛是提高技能和测试自己能力的一种有效方式。在参加比赛时,保持冷静和专注,不断尝试和学习他人的解决方案,并通过实践来提高自己的编程水平。比赛开始后,你将面临一系列编程问题。),点击右上角的"Register"按钮,按照指示填写必要的信息并完成注册过程。接下来,我们计算两个整数的和,并将结果打印输出。

WqSmalltalk的博客 1744

arc064f

题目大意 给出n,m.问有多少个长度为n的序列a满足:1&lt;=a[i]&lt;=m,并且序列a经过若干次循环左移能变成回文. i.e:1,1,2,2 左移一次-&gt; 1,2,2,1. n,m&lt;=1e9 题解 先考虑如果没有旋转的限制的情况 显然就是(n/2)m(n/2)m(n/2)^m,旋转的话理论上是乘n,但是显然会算重 算重的原因就是因为几个回文串可以通过题目...

Marcus 527

AtCoder初学者比赛:编程学习

ABC比赛为初学者提供了一个良好的平台,让他们在编程竞赛中获得实践经验,并提高他们的编程技能。在编程领域,AtCoder Beginner Contest(ABC)是一个非常受欢迎的比赛,旨在帮助初学者提高他们的编程能力。在这篇文章中,我们将介绍ABC比赛的一些基本概念,并提供一些示例代码来帮助您更好地理解。让我们来看一个简单的示例,来帮助您了解ABC比赛的工作原理。希望本文能帮助您了解AtCoder初学者比赛(ABC)的基本概念,并为您的编程学习之旅提供一些指导。给定两个整数A和B,计算它们的和。

IELLQUI8的博客 2864

Rotated Palindromes

问题 J: Rotated Palindromes时间限制: 1 Sec  内存限制: 128 MB提交: 4  解决: 3[提交][状态][讨论版][命题人:admin]题目描述Takahashi and Aoki are going to together construct a sequence of integers.First, Takahashi will provide a sequ...

Acerkoo的博客 320

深入理解AtCoder:C++竞赛编程与实践

本文还有配套的精品资源,点击获取 简介:AtCoder是程序员喜爱的在线编程竞赛平台,尤其在C++社区中有很高的认可度。了解AtCoder的同时,掌握C++基础、编程技巧、竞赛相关知识、调试测试方法和版本控制技能是提升竞赛表现的关键。本介绍提供了关于如何使用C++参与AtCoder竞赛的全面概述,包括模板、STL、算法优化、异常处理和版本控制等关键点。 1. C+...

weixin_42143092的博客 2191

华为擎云W515 PGUV-WBY0安装银河麒麟V10全流程解析

本文详细解析了华为擎云W515 PGUV-WBY0安装银河麒麟V10系统的全流程,包括准备工作、镜像下载与校验、启动盘制作、BIOS设置、安装过程关键选择、系统初始化及常见问题排查。特别针对ARM架构设备提供了实用技巧,帮助用户顺利完成国产化系统的部署与优化。

weixin_28725949的博客 696

AtCoder算法竞技平台简介

AtCoder是日本最大的算法竞技网站,域名为http://atcoder.jp/(注意http://www.atcoder.jp/ 是其官网)。AtCoder支持日语和英语。 AtCoder每周六北京时间20:00(日本标准时间则为21:00)会有比赛。AtCoder的比赛分为三个等级: (1)AtCoder Beginner Contest (ABC),是给算法初学者参加的。总共有4道...

小树学信奥 2万+

Multisim 11.0的安装破解汉化步骤

15:打开注册机,选择管理员运行,默认第一项,选择生成文件路径,这里不要随意选择,要找到你安装Multisim安装路径下Shard下的License Manager路径下,否则会报错,破解失败。14:后面会出现一个更新提示,选择否,然后选择重启电脑后,先不要选择重启电脑,在这里出现了问题(可能敲击回车,默认去重启电脑了),所以我说不要重启电脑,重启破解时右下角出现这,点击否。17:重启电脑,如果前面重启过,那可以跳过重启,应用程序下找到下图所示,启动。16:点击确认覆盖,路径下生成了该文件。

qq_53260940的博客 2366

AtCoder | ARC064 | 题解

ARC064 感觉这场还是挺简单的(但这并不影响我仍然不会做QwQ EEE题感觉啥都想到了。…知道要去求最短路…但却没有想到dij…???(smg C. Boxes and Candies 肯定是尽量改[2,n−1][2,n-1][2,n−1]的嘛…所以你就一遍扫下来就行啦呀 #include <bits/stdc++.h> #define ll long long using nam...

Averyta的博客 480

Unity程序化河流生成工具Waterways:从算法到实践的全流程解析

程序化内容生成(PCG)是游戏开发与三维建模领域的关键技术,它通过算法自动创建游戏内容,显著提升开发效率。其核心原理是将设计规则转化为可执行的代码逻辑,从而生成复杂、多样且符合自然规律的环境资产。在开放世界游戏和模拟经营类项目中,程序化生成技术能够快速构建大规模、高一致性的自然场景,如山川、森林与水体网络。Unity引擎作为广泛使用的开发平台,其地形系统与着色器管线为程序化工具的集成提供了强大基础。本文聚焦于利用Waterways这一Unity工具集,深入探讨如何通过模拟重力驱动、流量累积等自然水力原理,在

weixin_33690963的博客 684

一种基于OpenPose和DNN的跌倒检测软件系统(中文&英文)

学习并实现一种跌倒检测模型,此模型基于OpenPose实现逐帧人体姿态检测,使用DNN识别人体动作。检测方式有在线与离线两种,本文主要测试了离线模式,测试效果较好。

Tongzhou_Li的博客 2642

【字符串】Atcoder 064F Rotated Palindromes

分析: 显然,对于长度为N,字符种类为K的字符串,其回文串的个数为k⌈n2⌉k⌈n2⌉k^{\lceil \frac n 2\rceil} 而且每个字符串都可以操作N次。但是会有重复。 首先,对于一个字符串N,其最小循环节长度为c, 若c为奇数,那么有恰好有c个不同的字符串。 若c为偶数,那么有恰好c2c2\frac c 2个不同的字符串。 所以只需要求最小循环节大小为c的字符串个数即...

氧化钠的博客 355

考虑风和浪的影响的旋筒帆船航线优化方法研究

针对旋筒帆船进行航线优化的实现方法,包括升阻力系数的数值模拟、升阻力系数的多元非线性回归建模、旋筒帆船6DOF摇荡运动建模分析以及考虑风、浪影响的旋筒帆船的航线优化研究。

m0_63225885的博客 1163

AtCoder Regular Contest 064 F - Rotated Palindromes

Problem Statement Takahashi and Aoki are going to together construct a sequence of integers. First, Takahashi will provide a sequence of integersa, satisfying all of the following conditions: ...

weixin_33969116的博客 176

2、探秘储备池计算:原理、应用与前沿趋势

储备池计算(Reservoir Computing)作为一种新兴的计算方法,起源于计算神经科学和机器学习领域,现已广泛应用于非线性动力系统理论、物理学、材料科学、生物学和机器人学等多个领域。其核心优势在于概念简洁性,通过利用高维动态系统的非线性响应,将学习过程集中在读出层,避免了传统循环神经网络(RNN)训练的复杂性。储备池计算的发展方向主要包括拓展到非线性动态系统和利用物理动态系统作为计算资源(PRC),后者有望突破冯·诺依曼瓶颈,实现边缘计算。理论方面,储备池计算与人类大脑的信息处理方式密切相关,并推动

ggg99的专栏 729

Python爬虫实战:全面采集国家自然科学基金项目数据的全流程指南

国家自然科学基金委员会(NSFC)支持基础研究、应用基础研究,是我国科研投入的核心项目之一。公开的项目数据包括项目名称、负责人、资助金额、年度、单位等,具备极高科研和数据分析价值。requests:基础HTTP请求库,简单直观:异步HTTP请求库,适合大规模并发:HTML解析,提取数据:处理JavaScript渲染网页pandas:数据分析与清洗:数据库存储:重试机制实现。

2201_76125261的博客 753

At Coder入门与比赛

At Coder入门与比赛

青少年趣味编程 1789

大学生作业:80C51存储器数据传输实验:基本指令和数据传送

大学生作业:80C51存储器数据传输实验,报价 200 文章目录实验一、80C51存储器数据传输实验实验目的:实验内容一:基本指令实验内容二:数据传送 实验一、80C51存储器数据传输实验 实验目的: 熟悉软件的集成开发环境 掌握单片机软件设计流程,掌握存储器结构及各窗口之间的联系 掌握内部数据存储器、外部数据存储器的数据传送特点和应用; 实验内容一:基本指令 用三种方法实现将累加器A内容改为20H ORG 0000H LJMP MAIN ORG 0030H MAIN: ;方法一使用寄

weixin_54707168的博客 5099

AtCoder褐名记

今年四月份开始参加AtCoder比赛,至今参加了9次。在第9次结束后,涨了一级,从最低级的灰名涨到倒数第二级的褐名。 相对于我这样的新手而言,AtCoder比TopCoder和Codeforces更加合适。AtCoder分三个级别的比赛:AtCoder Beginnner Contest(ABC),AtCoder Regular Contest(ARC),AtCoder Grand Co...

小树学信奥 6208

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

AtCoder题解集锦

AtCoder题解集锦 自己从全网整理的一些优质AtCoder题解,目前只有ABC(AtCoder Beginner Contest)的C~F。不定期更新。 如您有更多需求,欢迎私信我或在评论区留言! 用法 表格查找 找到对应比赛的行 找到对应题目的列 该位置即为对应的题解 题号查找 在浏览器中按下搜索快捷键Ctrl+F,调出搜索窗口。 输入对应的题号,如244F 找到对应题解 标题查找 在浏览器中按下搜索快捷键Ctrl+F,调出搜索窗口。 输入题目标题,如Shortest Good

天生我材必有用,千金散尽还复来。 1万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

探索AtCoder命令行工具:提升编程竞赛效率的新利器!

在程序员的世界里,AtCoder是一个备受欢迎的在线编程竞技平台。如今,借助**atcoder-cli**这个开源项目,你可以将AtCoder体验提升到新的层次。它是一个强大的命令行工具,旨在帮助参赛者更加便捷地获取比赛信息、创建项目目录并自动设置模板,甚至可以与[online-judge-tools](https://github.com/kmyk/online-judge-tools)集成,让

gitblog_00059的博客 830

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

第三课:C++网站推荐(atcoder)

作者:上次讲了多多网站,这次来个噩梦。粉丝:赶紧购买百度翻译、谷歌翻译会员。作者:就是大名鼎鼎的atcoder。粉丝:又是那个不要脸的浪里个浪吧。作者:接下来咱讲讲赛多多。粉丝:这到底是啥呀?作者:题主要考逻辑思维,还可以。粉丝:我都八万年没做噩梦了。粉丝:完了完了,芭比Q了。粉丝:at-coder?作者:这大多都是周赛。

浪子回头 519

Atcoder经典题

重点: if (abs(x / g * g - x) < abs((x / g + 1) * g - x))//四舍五入。取模公式: ( A - B) % mod = ((A % mod) - (B % mod) + mod) % mod.操作:第一轮对个位进行四舍五入,第二轮对百位进行四舍五入,第三轮对百位进行四舍五入......以此类推到K轮。题意: 一共有六个数A,B,C,D,E,F。求A*B*C - D*E*F最后%998244353的值。所以我们需要边算边取模。

wmdyttxs的博客 1037

[arc064f]Rotated Palindromes

题目大意有多少字符集为k的长度为n的字符串经过旋转可以变成回文串。做法设f[i]表示周期为i的回文串数量。 有f[i]=k(i+1)/2−∑j|i且j<if[j]f[i]=k^{(i+1)/2}-\sum_{j|i且j<i}f[j] 显然border为i的串能旋转出i个字符串。 然后注意一个偶border串会被算两次。#include<cstdio> #include<algorithm> #

不来也不去的一只失忆蝴蝶 666
上一篇: 【AtCoder】【AGC009D】Uninity
下一篇: 【AtCoder】【ARC072F】Dam
HOWARLI
博客等级 码龄11年 109粉丝 378原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值