PAT TOPlevel 1118. Subnumbers (35)
来源:互联网 发布:golang 事件总线 编辑:程序博客网 时间:2024/05/01 16:06
顶级新题,看数据量10万,暴力应该会TLE。动态规划加找规律题。
首先我们来看下例子中的1021是怎么计算的:
从低位往高位计算:个位=1;十位=2+21;百位等于零不参与计算;千位=1+10+102+1021.......
有啥规律捏???
我们可以把个位看成1*1+0,十位看成2*11+个位和,百位看成0*111+十位和,千位看成1*1111+百位和......
规律找到了,下面就讲下如何实现。
我们可以首先初始化一个base[]数组,存储第i为的基数,也就是类似个位1十位11百位111等等....
然后按照刚刚的规律每一位的和等于该位数字*该位基数+前一位和,这样我们就得到了一个dp[]数组;
最后再对每一位不为0的和进行相加就行了。。。。。。
(PS:早知道9月去考顶级了,MD甲级最后一题卡了我2个多小时都没做出了。。。。。。)
下面附上代码:
#include <bits/stdc++.h>using namespace std;typedef long long ll;const int mod=1000000007;const int maxn=100005;ll dp[maxn],base[maxn];char str[maxn];void init(){ ll res=0; for(int i=1;i<maxn-1;i++) { res=res*10+1; if(res>=mod) res%=mod; base[i]=res; }}int main(){ init(); scanf("%s",str+1); int len=strlen(str+1); reverse(str+1,str+len+1); for(int i=1;i<=len;i++) { dp[i]=(dp[i-1]+((str[i]-'0')*base[i])%mod)%mod; } ll res=0; for(int i=1;i<=len;i++) { if(str[i]!='0') res=(res+dp[i])%mod; } printf("%lld\n",res); return 0;}
阅读全文
0 0
- PAT TOPlevel 1118. Subnumbers (35)
- PAT (Top Level) Practise 1018Subnumbers (35)
- Tkinter -- Toplevel
- TopLevel和Topmost
- 框体 Toplevel 主窗体
- Python:Tkinter-Toplevel window
- Tkinter教程之Toplevel篇
- Python TKinter Gui: Toplevel window
- Tkinter教程之Toplevel篇
- Tkinter学习(一)之Toplevel(1)
- GtkWindow — Toplevel which can contain other widgets
- 小白学tkinter(Toplevel组件(顶级窗口),用于弹窗)
- PAT. 1002. Business (35)
- PAT 1002. Business (35)
- pat
- 【PAT】
- PAT
- PAT
- 人工智能学习之前言
- RxJava2的各种恩怨情仇
- java.lang.NoSuchMethodException: com.xxx.xxx.xxx<init>()
- 实现一个简单的虚拟DOM
- HttpClient Post 二进制/字节流/byte[]
- PAT TOPlevel 1118. Subnumbers (35)
- Spring 统一访问数据模版
- 微信公众号官网提供代码示例的坑---自定义菜单
- MATLAB中图像的基本操作
- 面试体记录第九节——(Android studio目录结构认识)
- 4444: [Scoi2015]国旗计划
- Java抽象工厂模式
- assert运用的理解
- js获取浏览器的高度