CSU1810(2016年湖南省第十二届大学生计算机程序设计竞赛 - H)
来源:互联网 发布:数据库考点总结 编辑:程序博客网 时间:2024/05/18 05:01
Problem : Reverse
Description :
给你一个大整数。按照图中给的公式反转字符串然后加起来。输出最后答案。
Solution :
列举找规律+乘法逆元。举个列子吧。
12345 ,我们按照公式展开。得到12345−1111−111−11−121234−2345−222−22−233123−3234−345−33−344412−4423−434−45−455551−5552−553−54−5
我们观察3这个位置,即k=3,num=3 。在i≥4 时,num 一直待在自己的位置上。而在i=1 有两个待在自己的位置,i=2 有一个待在自己的位置。同时发现i=1 时num 从1−3 都待过,i=2 时num 从2−4 都待过,i=3 时num 从3−5 都待过。这样,就可以写出一个公式了。把这个公式化简下。得出了每一位的公式,这样,我们枚举每一位,然后把结果加起来就可以了,但是现在有个问题,结果很大,超过了⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪f(k)={[(n−k+1)∗(n−k)2+(k−1)∗k2]∗10n−k+a∗(1−110k)1−110}∗numa=10k−1∗(10n−k+1−1)9 longlong 的范围,因此要对(109+7) 取模。而公式中又用到了除法,我们知道,如果分子取模了再除分母,答案是会不对的。那么这个时候就要用到乘法逆元了。我用的是费马小定理求乘法逆元。因此这个题目还是考察了多个方面。
Code(C++) :
#include <stdio.h>typedef long long LL;const int M=100000+5;const LL MOD=1000000000LL+7;char num[M];LL n;LL mul(LL x,LL n,LL mod){ LL tmp=x; LL ans=1; while(n){ if(n&1){ ans*=tmp; ans%=mod; } tmp*=tmp; tmp%=mod; n>>=1; } return ans;}LL cal(LL digit,LL k){ LL tmp=(n-k+1)*(n-k)/2+k*(k-1)/2; tmp%=MOD; tmp=tmp*mul(10,n-k,MOD)%MOD; LL a=(mul(10,k-1,MOD)*(mul(10,n-k+1,MOD)-1+MOD))%MOD*mul(9,MOD-2,MOD)%MOD; LL t=(a*(mul(10,k,MOD)-1+MOD)%MOD)*(mul(9*mul(10,k-1,MOD)%MOD,MOD-2,MOD))%MOD; tmp=(tmp+t)%MOD; tmp=tmp*digit%MOD; return tmp;}int main(){ while(~scanf("%lld",&n)){ scanf("%s",num); LL ans=0; for(LL i=0;i<n;i++) ans=(ans+cal((LL)(num[i]-'0'),i+1))%MOD; printf("%lld\n",ans); } return 0;}
0 0
- CSU1810(2016年湖南省第十二届大学生计算机程序设计竞赛 - H)
- 2016年湖南省第十二届大学生计算机程序设计竞赛
- 2016年湖南省第十二届大学生计算机程序设计竞赛
- 2016年湖南省第十二届大学生计算机程序设计竞赛
- 湖南省第十二届大学生计算机程序设计竞赛 A 2016
- 湖南省第十二届大学生计算机程序设计竞赛 2016
- 2016年湖南省第十二届大学生计算机程序设计竞赛 A. 2016(数学)
- 2016年湖南省第十二届大学生计算机程序设计竞赛 A 2016(数学)
- CSU 1803 2016 (数学)【2016年湖南省第十二届大学生计算机程序设计竞赛 - A】
- 2016年湖南省第十二届大学生计算机程序设计竞赛(重现) A 2016
- csu 2016年湖南省第十二届大学生计算机程序设计竞赛Problem A 2016
- 2016年湖南省第十二届大学生计算机程序设计竞赛:A—2016
- 2016年湖南省第十二届大学生计算机程序设计竞赛 J 三角形和矩形(计算几何)
- CSU 1809 Parenthesis (线段树)【2016年湖南省第十二届大学生计算机程序设计竞赛 - G】
- 2016年湖南省第十二届大学生计算机程序设计竞赛 解题报告
- 2016年湖南省第十二届大学生计算机程序设计竞赛:B—有向无环图
- 2016年湖南省第十二届大学生计算机程序设计竞赛:F—地铁
- 2016年湖南省第十二届大学生计算机程序设计竞赛:G—parathesis
- android网络相关
- React Native 导航(Navigator)详解——实例一
- hadoop由于NodeManager无法启动而导致执行Jar包出现running job卡住的解决方案之一...
- 《OpenGL ES 2.0 Programming Guide》第12章“最简单的ReadPixels并保存为BMP”示例代码【C语言版】
- Codeforces Round #369 (Div. 2) A~D
- CSU1810(2016年湖南省第十二届大学生计算机程序设计竞赛 - H)
- 分布式系统下的纠删码(二) -- Locally Repairable Codes (LRC)
- 笔记 AndroidManifest.xml文件详解
- Android SAX解析XML文档 -- Android 学习之路
- 前端代码规范( HTML篇)
- HTML表格标签
- 操作系统基础(一)
- Git3.创建版本库(Git仓库)&提交更新到仓库
- 三、Lua中的语句