UVA11038- How Many O's?(组合数学)

题目链接

题意:求出在a到b之间的数中,有多少个0。

思路:组合数学问题。能够枚举每一个位置上的数i,如果i之前的数为left,后面的为right,后面有num位数。当i != 0时,将i置为0,所以组合数为left * 10^num(后面的位数,每一位有10种选择),当i = 0时,当前面取[1, left - 1]时,保证组合的数一定小于原来的数,所以后面的能够取10^num,当取left时,后面的数仅仅能取不大于right的数,所以组合数为(left
- 1) * (10 ^ num) + right + 1;

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

typedef long long ll;

ll a, b;

ll solve(ll left) {
    ll ans = 0, num = 1, right = 0, mid;
    while (left >= 10) {
        mid = left % 10;
        left /= 10;
        if (mid)
            ans += left * num;
        else
            ans += (left - 1) * num + right + 1;
        right += mid * num;
        num *= 10;
    }
    return ans;
}

int main() {
    while (scanf("%lld%lld", &a, &b)) {
        if (a == -1 && b == -1)
            break;
        ll ans = solve(b) - solve(a - 1);
        if (a == 0)
            ans++;
        printf("%lld\n", ans);
    }
    return 0;
}

UVA11038- How Many O's?(组合数学)

时间: 2024-11-09 01:47:46

UVA11038- How Many O&#39;s?(组合数学)的相关文章

=-098765

http://ypk.39.net/search/all?k=%A1%B8%D4%E6%D1%F4%C3%D4%BB%C3%D2%A9%D4%F5%C3%B4%B9%BA%C2%F2Q%A3%BA%A3%B6%A3%B9%A3%B5%A3%B2%A3%B5%A3%B6%A3%B7%A3%B1%A3%B7%A8%7C http://ypk.39.net/search/all?k=%A8%93%D2%CB%B3%C7%C3%D4%BB%C3%D2%A9%D4%F5%C3%B4%B9%BA%C2%F2

【BZOJ2227】【ZJOI2011】看电影 [组合数学][质因数分解]

看电影 Time Limit: 10 Sec  Memory Limit: 259 MB[Submit][Status][Discuss] Description 到了难得的假期,小白班上组织大家去看电影.但由于假期里看电影的人太多,很难做到让全班看上同一场电影,最后大家在一个偏僻的小胡同里找到了一家电影院.但这家电影院分配座位的方式很特殊,具体方式如下: 1. 电影院的座位共有K个,并被标号为1…K,每个人买完票后会被随机指定一个座位,具体来说是从1…K中等可能的随机选取一个正整数,设其为L.

hdu 4810 Wall Painting (组合数学+二进制)

题目链接 下午比赛的时候没有想出来,其实就是int型的数分为30个位,然后按照位来排列枚举. 题意:求n个数里面,取i个数异或的所有组合的和,i取1~n 分析: 将n个数拆成30位2进制,由于每个二进制位异或后相加和原来的数异或相加是一样的,所以只需要对每一位累加计算,用组合数学取数就行了,奇数个异或得1,偶数个异或得0,再乘以自己的二进制位值,复杂度O(30*n*n) 1 #include <iostream> 2 #include <cstdio> 3 #include <

第39届ACM国际大学生程序设计竞赛 亚洲区域赛(现场赛)西安站

 第39届ACM国际大学生程序设计竞赛 亚洲区域赛(现场赛)西安赛区总结报告 报告人:田思明 队名:ACpioneer 队长:陈志阳,队员:顾振兴,田思明 西安区域赛告下帷幕,我和陈志阳,顾振兴组成的ACpioneer队最终获得了一块宝贵的铜牌.首先要感谢陈志阳和顾振兴两位杰出队友的努力训练和出色表现,我作为一个新人跟着他们学到了很多很多,也十分珍惜和他们在一起的训练,比赛时光,其次要感谢陈志老师,不辞辛劳陪我们5队和6队前往西安参加比赛,还要感谢集训队所有曾经帮过我们的所有队员们,记得cdy

BZOJ_1005_ [HNOI2008]_明明的烦恼_(组合数学+purfer_sequence+高精度+分解因数)

描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1005 一棵树有n个点,给出没给节点的度,如果没有限制则为-1,求共有多少种可能的树. 分析 蒟蒻我肯定是不会做的,所以先来抄一段题解... 这题需要了解一种数列: Purfer Sequence 我们知道,一棵树可以用括号序列来表示,但是,一棵顶点标号(1~n)的树,还可以用一个叫做 Purfer Sequence 的数列表示 一个含有 n 个节点的 Purfer Sequence 有 n-

POJ1942——Paths on a Grid(组合数学)

Paths on a Grid DescriptionImagine you are attending your math lesson at school. Once again, you are bored because your teacher tells things that you already mastered years ago (this time he's explaining that (a+b)2=a2+2ab+b2). So you decide to waste

【2015暑假】鸽巢原理总结 【算法思路+组合数学】

组合数学之鸽巢原理 如果要把n+1物体放进n个盒子里,那么至少会有一个盒子包含2个或2个以上的物体. 现在问题来了:给你n个数,从中选出若干个数使得它们的和为n的倍数. 鸽巢原理表示:一定存在若干个连续的数,它们的和是n的倍数. 有的情况下,不光要知道一定存在,而且还要找出是哪些数,算法如下: n = 4; a[]:3  2  1  9 s[]:3  5  6  15   (注:) 先检查s[]中有没有某个s[i]%n==0,如果存在,那么这些数字它们加起来就可以整除n.如果不存在,那么由基本定

best coder #35-01&lt;组合数学 || 概率数学&gt;

问题描述 一个盒子里有n个黑球和m个白球.现在DZY每次随机从盒子里取走一个球,取了n+m次后,刚好取完.DZY用这种奇怪的方法生成了一个随机的01串S[1?(n+m)].如果DZY第i次取出的球是黑色的,那么S[i]=1,如果是白色的,那么S[i]=0. DZY现在想知道,'01'在S串中出现的期望次数. 输入描述 输入有多组测试数据. (TestCase≤150) 每行两个整数, n, m(1≤n,m≤12) 输出描述 对于每个测试数据,输出一行答案,格式为p/q(p,q互质). 输入样例

POJ1850——Code(组合数学)

Code DescriptionTransmitting and memorizing information is a task that requires different coding systems for the best use of the available space. A well known system is that one where a number is associated to a character sequence. It is considered t