数论 - 简单数位推理 --- NYIST 514

Problem‘s Link:http://acm.nyist.net/JudgeOnline/problem.php?pid=514



Mean:

给你一个l和r,求出在这个范围内的1的个数。

analyse:

简单的数位推理。

Time complexity:O(n) n为数字的位数

Source code:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<string>
#include<queue>
#include<map>
#include<cstdlib>
#include<stack>
#define N 11
using namespace std;
int d[N];
int value;
void deal(int n)
{
    if(n<=0) return;
    int one,ten;
    one=n%10;
    n/=10;
    ten=n;
    for(int i=0;i<=one;++i)
    {
        d[i]+=value;
    }
    while(ten)
    {
        d[ten%10]+=(one+1)*value;
        ten/=10;
    }
    for(int i=0;i<10;++i)
        d[i]+=value*n;
    d[0]-=value;
    value*=10;
    deal(n-1);
}
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    int s,e;
    while(cin>>s>>e,s||e)
    {
        if(s>e)swap(s,e);
        memset(d,0,sizeof d);
        value=1;
        deal(e);
        value=-1;
        deal(s-1);
        cout<<d[1]<<endl;
    }
    return 0;
}

  

时间: 2024-10-14 18:54:26

数论 - 简单数位推理 --- NYIST 514的相关文章

数论 --- 简单题

吃糖果 Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 22376    Accepted Submission(s): 6396 Problem Description HOHO, 终于从Speakless手上赢走了所有的糖果,是Gardon吃糖果时有个特殊的癖好,就是不喜欢将一样的糖果放在一起吃,喜欢先吃一种,下一次吃另一 种,这样:

HDU 2089 简单数位dp

1.HDU 2089  不要62    简单数位dp 2.总结:看了题解才敲出来的,还是好弱.. #include<iostream> #include<cstring> #include<cstdio> using namespace std; int dp[10][11]; //dp[i][j]表示以j为首位符合条件的i位数的个数 void init() //预处理 { memset(dp,0,sizeof(dp)); dp[0][0]=1; for(int i=1

数论 --- 简单计算

Power of Cryptography Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 18018   Accepted: 9090 Description Current work in cryptography involves (among other things) large prime numbers and computing powers of numbers among these primes. W

URAL1353---Milliard Vasya&#39;s Function(简单数位dp)

Vasya is the beginning mathematician. He decided to make an important contribution to the science and to become famous all over the world. But how can he do that if the most interesting facts such as Pythagor's theorem are already proved? Correct! He

Codeforces 413B Spyke Chatting(数论简单)

题目链接:Codeforces 413B Spyke Chatting 题目大意:n个人,m种聊天器,k次发送消息,然后给出n*m的矩阵,如果g[i][j]为1,则表示i号人会使用j号聊天器,接着给出k次消息发送者和聊天器,如果i在j种聊天器上发送了一条消息,那么所有使用j种聊天器的人都会接受到消息.现在要求每个人会接受到几条消息,自己发送的不算. 解题思路:分别记录每个聊天器上有多少个消息,以及每个人发送了多少条消息,然后计算每个人接受到多少条消息的时候只要将这个人所使用的各个聊天器消息数取和

数论简单题 组合数

本人水平有限,题解不到为处,请多多谅解 本蒟蒻谢谢大家观看 题目: 数论简单题 (simple.cpp/in/out 1s 256M) 由于最终结果可能超过int的范围,因此请将运算结果对1000000007取模. Input 第1行,一个整数T(T <= 200000),表示数据组数. 第2行至第T+1行,每行两个整数m, n. 0 < m <= n <= 2000 Output 共T行,每行输出一个整数,代表求和结果. Sample Input 3 1 1 2 3 3 3 Sa

windy数(简单数位DP)

1026: [SCOI2009]windy数 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 6306  Solved: 2810[Submit][Status][Discuss] Description windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B之间,包括A和B,总共有多少个windy数? Input 包含两个整数,A B. Output 一个整数 Sample I

数位DP合集

1.HDU 4722 good numbers: 题意:给出一个区间[A,B],求出区间内有多少个数的各位的和加起来模10等于0的数有多少个. 解法:这是一个数位DP简单入门题,简单的DFS+数组记忆化搜索就可以.姿势是自己写的..感觉略搓,做到第三个数位DP题的时候看到了别人的姿势,学习了. 代码: #include <iostream> #include <cstdio> #include <stack> #include <cstring> #incl

USETC 250 windy数 数位DP

注意处理数字只有一位的情况(其实不用怎么处理)= = 简单数位DP #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <climits> #include <string> #include <iostream> #include <map> #include <cstdlib> #