CSU1642-Problem B-前缀和数组/模拟
来源:互联网 发布:招聘网站源代码 java 编辑:程序博客网 时间:2024/06/08 02:37
T: Problem B
Description
已知两个正整数a和b,求在a与b之间(包含a和b)的所有整数的十进制表示中1出现的次数。
Input
多组数据(不超过100000组),每组数据2个整数a,b.(1≤a,b≤1000000).
Output
每组数据的答案占一行。
Sample Input
1 1010 1002 1
Sample Output
2201
这样的题目都是显然数据量是大到不可能让你一个个模拟过来的,那么基本就有以下两种解决方法:
1,前缀和。比如这一题,就是用num[i]表示从0到i中所有证书十进制表示中1出现的次数,那么结果就是输出num[b]-num[a-1]
我自认我的前缀和写法还是可以,但是可惜开始的时候1kw时并没有更新,WA了好几发简直气死
AC代码:
#include <cstdio>#include <iostream>#define N 10100#define INF 0x3f3f3f3f#define LL long long#define mem(a,n) memset(a,n,sizeof(a))#define fread freopen("in.txt","r",stdin)#define fwrite freopen("outB.txt","w",stdout)using namespace std;int num[1100100];int main(){// fwrite; ios::sync_with_stdio(false); int t=10,stat=1,a,b; while(t<=1000000){ for(int i=stat;i<=1000000;i+=t){ for(int j=i;j<i+stat;++j){ ++num[j]; } } stat=t; t*=10; } for(int i=1;i<=1000000;++i){ num[i]+=num[i-1]; }// for(int i=0;i<=1000000;++i){// cout<<i<<' '<<num[i]<<endl;// } num[1000000]+=1; while(scanf("%d%d",&a,&b)!=EOF){ if(a<b){ swap(a,b); } cout<<num[a]-num[b-1]<<endl; } return 0;}
2,构造法。构造一个函数fun(i)能比较快速地求出从0到i的十进制表示中1出现的次数
AC代码:
#include <cstdio>#include <iostream>#define N 10100#define INF 0x3f3f3f3f#define LL long long#define mem(a,n) memset(a,n,sizeof(a))#define fread freopen("in.txt","r",stdin)#define fwrite freopen("outB.txt","w",stdout)using namespace std;int Num(int n){ int temp=n,res,t=1,num=0; while(temp>0){ res=temp%10; temp/=10; if(res==0){ num+=t*temp; }else if(res==1){ num+=(n-n/t*t+1+temp*t); }else{ num+=(temp+1)*t; } t*=10; } return num;}int main(){ //fwrite; int a,b; while(~scanf("%d%d",&a,&b)){ if(a<b){ swap(a,b); } cout<<Num(a)-Num(b-1)<<endl; } return 0;}
阅读全文
0 0
- CSU1642-Problem B-前缀和数组/模拟
- 洛谷Oj-A % B Problem-前缀和(部分和)
- B. Fence----前缀和
- codeforces contest 855 problem B(前缀后缀)
- Problem B +树状数组
- 【BZOJ2301】【HAOI2011】Problem b 莫比乌斯反演+分块+前缀和
- hdu5327_Olympiad(数组前缀和)
- poj_1000 A+B Problem 模拟
- Codeforces 853B Round #433 Div2D& Div1B Jury Meeting:差分前缀和+模拟
- CF-608B 前缀和
- 多线程技术模拟并行计算之二:数组前缀和(Prefix Sum)
- Problem B: 数组逆序输出
- 前缀和---三分数组nkoj3049
- 北邮09复试模拟problem B
- 北邮08复试模拟problem B
- 【MAP模拟】SDUT 1471 A + B problem
- hdu_1013_A + B Problem II_(模拟)
- 【模拟】洛谷 P1001 A+B Problem
- CSU1826-Languages-AC自动机
- CSU1830-FarAway-拓扑排序/最长路
- CXF返回SOAP报文太长不能完全保存的问题
- 循环数组最大子段和
- kali安装后的更新源与安装中文输入法
- CSU1642-Problem B-前缀和数组/模拟
- phpstudy下安装laravel
- CSU1383-A Easy Problem-模拟
- Golang 页面模板之间的嵌套定义以及静态文件的加载方式
- 通过qemu命令搭建虚拟机环境
- iOS
- C++11系列——函数对象(Function Object)
- Java设计模式之五种单例模式
- CSU1204-Rectangles-二分