第十一周周四总结
来源:互联网 发布:合同翻译软件 编辑:程序博客网 时间:2024/05/19 01:08
这几天做的题感觉越来越难了,今天晚上做了一晚上就做了两个题,尤其是Q题,光看博客上的题解就看了半天没看懂。。。还有就是提交了几次都是因为提交错题了。。。尴尬,再看会这题题解12点睡觉吧。。
Y - odd-even number
For a number,if the length of continuous odd digits is even and the length of continuous even digits is odd,we call it odd-even number.Now we want to know the amount of odd-even number between L,R(1<=L<=R<= 9*10^18).
2 1 100 110 220
Case #1: 29Case #2: 36
#include<iostream>#include<stdio.h>#include<string.h>using namespace std;typedef long long LL;int a[30];long long dp[30][10][2][2];long long dfs(int p,int zq,bool zero,bool mz,bool limit){if(p==-1) return mz;int up=limit?a[p]:9;LL& ans=dp[p][zq][zero][mz];if(!limit&&ans!=-1) return ans;long long s=0;if(zero) { for(int i=0;i<=up;i++) s+=dfs(p-1,i,i==0,!(i&1),limit&&i==up); }else if(mz) { for(int i=0;i<=up;i++) s+=dfs(p-1,i,0,(zq&1)&&!(i&1),limit&&i==up); }else { for(int i=(zq&1);i<=up;i+=2) s+=dfs(p-1,i,0,1,limit&&i==up); }if(!limit) ans=s;return s;}long long solve(long long x){int p=0;if(x==0) return 1;while(x) { a[p]=x%10; p++; x/=10; }return dfs(p-1,0,true,true,true);}int main(){int t;memset(dp,-1,sizeof(dp));long long aa,bb,s;scanf("%d",&t);for(int i=1;i<=t;i++) { scanf("%I64d %I64d",&aa,&bb); s=solve(bb)-solve(aa-1); cout<<"Case #"<<i<<": "<<s<<endl; }return 0;}
Q - count 数字计数
1 99
9 20 20 20 20 20 20 20 20 20
30%的数据中,a<=b<=10^6;
100%的数据中,a<=b<=10^12。
#include<iostream>using namespace std;long long n[15],m[15];long long f1[15],f2[15];int a[20];void csh(){m[0]=1;for(int i=1;i<15;i++) { n[i]=10*n[i-1]+m[i-1]; m[i]=m[i-1]*10; }}void solve(long long x,long long *f){if(x==0) return;int i,j;int p=0;long long xx=x;while(x) { a[++p]=x%10; x/=10; }for(i=1;i<p;i++) { f[0]+=n[i-1]*9; for(j=1;j<10;j++) f[j]+=n[i-1]*9+m[i-1]; }xx-=a[p]*m[p-1];for(i=1;i<a[p];i++) f[i]+=m[p-1];for(i=0;i<10;i++) f[i]+=n[p-1]*(a[p]-1);f[a[p]]+=xx+1;i=p-1;while(i) { xx-=a[i]*m[i-1]; for(j=0;j<a[i];j++) f[j]+=m[i-1]; for(j=0;j<10;j++) f[j]+=n[i-1]*a[i]; f[a[i]]+=xx+1; i--; }}int main(){long long aa,bb;while(cin>>aa>>bb) { csh(); solve(bb,f2); solve(aa-1,f1); for(int i=0;i<9;i++) cout<<f2[i]-f1[i]<<" "; cout<<f2[9]-f1[9]<<endl; }return 0;}
阅读全文
0 0
- 第十一周周四总结
- 第十四周周四总结
- 第十一周总结
- 第十一周总结
- 第十一周总结
- 【考研】第十一周总结
- 第十四周一周总结
- 第十一周周末总结+反思
- 第十一周 OJ总结<1>-查闰年
- 第十一周 OJ总结<2>-判断三角形
- 第十一周 OJ总结<6>-牛顿迭代法
- 第十一周训练总结(一)
- 2017开学训练第十一周周末总结
- 第十一周训练总结(二)
- 第十一周
- 第十一周
- 第十一周
- 第十一周
- 1002A+B Problem
- selenium中的常见报错
- Java 网络编程初探(一)
- hibernate-3.2.0下载地址
- 絮叨---imu
- 第十一周周四总结
- 11.9练习
- 简单工厂、工厂方法、抽象工厂、策略模式、策略与工厂的区别
- CCF-训练50题-NO.7-日历问题
- java8新特性回顾(六)---跟OOM:permGen说再见
- ubuntu下没有phpize的解决方法
- Vector
- 树莓派终端背景色调节
- 1004搬砖问题