• 枚举


    枚举(打表):

    题目

    有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
  • 相关阅读:
    Effective C# 原则50:了解ECMA标准(译)
    Effective C# 原则47:选择安全的代码(译)
    DevExpress小结(简略)
    Effective C#49:为C#2.0做好准备(译)
    Effective C# 原则45:选择强异常来保护程序(译)
    我在犹豫是不是该收集这几首MP3
    用C#预览视频文件(简略)
    DevExpress库的学习总结(简略)
    SharePoint 2010 隐藏快速启动栏(左侧导航)
    将 Excel 导入到 SharePoint 列表
  • 原文地址:https://www.cnblogs.com/darklights/p/7041066.html
Copyright © 2020-2023  润新知