zoukankan      html  css  js  c++  java
  • 枚举

    枚举(打表):

    题目

    有N根柱子排成一排,编号为1到N,现在XY站在第S根柱子上,出口在第T跟柱子上。每次XY可以走到相邻的柱子上,也可以使用超能力跳到第一根柱子或者第N根柱子上,如果离开了柱子之后再也不能到达这里。为了节省能量,XY想用最少次数超能力通关。(无法通过就输出-1)

    输入样例

    4 1 4

    4 1 3

    输出样例

    0

    1

    这题你怎么想?你会怎样下手?

    无解的情况只有起点和终点位置一样且N不为1。终点和起点都在边界上答案为0,如果起点在边界上或者起点终点相邻答案为1,其他答案为2。
    View Code

    题目:

    有一种奇怪的数,这是一种所有数字是不同的一个整数,名字叫美丽数(例如12345 是美丽数, 11 不是美丽数 ,100 也不是美丽数)。你能算一算在某一区间[a,b]范围内有多少个美丽数吗?

    输入范例

    2

    1 10

    1 1000

    输出范例

    10

    738

    /*首先可以枚举1到100000的每一个数字是否是美丽的数字,只需要将每一位数字提取出来之后判断是否用过即可。
    再预处理出每一个前缀中有多少美丽的数字。
    比如可以用f[i]表示小于等于i的所有数字中有多少美丽的数字。之后对于每组数据答案就是f[b] - f[a - 1]。*/
    
    #include <cstdio>
    #include <algorithm>
    using namespace std;
    
    int x, y, b[100], a[110000];
    
    bool calc(int x) {
        int len = 0;
        while (x) {
            b[++len] = x % 10;
            x /= 10;
        }
        sort(b + 1, b + len + 1);
        for (int i = 1; i < len; i++)
            if (b[i] == b[i + 1]) return false;
        return true;
    }
    
    int main()
    {
        for (int i = 1; i <= 100000; i++)
            a[i] = a[i - 1] + calc(i);
        while ((scanf("%d%d", &x, &y))!=EOF) {
            printf("%d
    ", a[y] - a[x - 1]);
        }
    }
    View Code
  • 相关阅读:
    fluent/starccm/商业CFD软件中残差的概念
    windows 下用命令来操作定时任务
    selenium下打开Chrome报错解决
    TypeError: a bytes-like object is required, not 'str'
    Cannot redeclare class phpmailerException
    linux freetds无法构建错误:为--with-tdsver:8.0指定的值无效
    Apache 修改端口号
    php 二维数组按照某个键排序
    php 计算 距离
    pymysql 读取数据库没有字段
  • 原文地址:https://www.cnblogs.com/darklights/p/7041066.html
Copyright © 2011-2022 走看看