• [20181016晚][模拟赛]


    题目

    enter image description here

    思路

    这个题目看了很久没有思路,旁边的大(S)佬(B)不到十分钟就秒了。知道正解之后感觉自己太菜了。

    首先题目意思就是,要找到两个数,使得这两个数中所有的数码都是对应的。也就是x的数码中如果有1,2,3那么y中也必须有1,2,3对个数不做限制。那么就用一个数来表示一些数码组合。比如说123,那么就找一个二进制上1,2,3位都是1的数7来表示由1,2,3组成的数。然后从1扫到n,因为先扫到小的,所以后面可以直接查询,然后修改。

    代码

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    using namespace std;
    typedef long long ll;
    ll read() {
        ll x = 0,f = 1;char c = getchar();
        while(c < '0' || c > '9') {
            if(c == '-') f = -1;
            c = getchar();
        }
        while(c >= '0' && c <= '9') {
            x = x * 10 + c - '0';
            c = getchar();
        }
        return x * f;
    }
    int now = 0;
    int solve(int x) {
        int now = 0;
        while(x) {
            now |= 1<<(x%10);
            x /= 10;
        }
        return now;
    }
    ll a[10000000];
    int main() {
        int	n = read();
        ll ans = 0;
        for(int i = 1;i <= n;++i)
            ans += a[solve(i)]++;
        cout<<ans;
        return 0;
    }
    

    每篇一言

    罪?那是人类们以自己的标准任意决定的。 ——寄生兽

  • 相关阅读:
    WP2Sinablog使用后的后遗症
    .NET Framework 4 与 .NET Framework 4 Client Profile
    360浏览器也有了开发人员工具了
    让你的手机号“变”qq号
    首次体验 Live Writter
    判断素数
    SqlServer文件挂起
    vni—2015:验证错误
    成功者善于模仿(转)
    dbms_output缓冲区溢出
  • 原文地址:https://www.cnblogs.com/wxyww/p/9801758.html
Copyright © 2020-2023  润新知