题目链接

题意 : 给出一个 x 和 k 问有多少个 y 使得 x = f(y, k) - y 、f(y, k) 为 y 中每个位的数的 k 次方之和、x ≥ 0

分析 :

f(y, k) - y = x ≥ 0

满足条件的 y 最多不超过 10 位

这个并不知道怎么证、网上有很多结论证明、仔细推敲过后发现都是错的

可能需要手动打表模拟一下吧......

变化一下式子

x = f(a, k) - a + f(b, k) - b * (1e5)

x - f(a, k) + a = f(b, k) - b * (1e5)

那么先处理出等式右边的 f(b,k) - b*(1e5)

这个的复杂度是大于但是不怎么大于 O(1e5 * 9)

然后再从 0 ~ 1e5 枚举 a 用二分查找出满足条件的数的个数

#include<bits/stdc++.h>
#define LL long long
using namespace std;

;
LL F[maxn][];
vector<LL> num;
LL x, k;

LL Qpow(LL a, int b)
{
    LL ret = ;
    while(b){
        ) ret = ret * a;
        a = a * a;
        b >>= ;
    }return ret;
}

LL GetF(int i, int j)
{
    LL ret = ;
    while(i){
        ret += Qpow((LL)(i%), j);
        i /= ;
    }return ret;
}

inline void init()
{
    ; i<=(int)1e5; i++)
        ; j<=; j++)
            F[i][j] = GetF(i, j);
}

LL Solve()
{
    num.clear();

    ; i<=(int)1e5; i++) num.push_back(F[i][k] - 1LL * i * (LL)1e5);

    sort(num.begin(), num.end());

    LL ret = ;
    ; i<=(int)1e5; i++)
        ret += upper_bound(num.begin(), num.end(), x - F[i][k] + i) -
               lower_bound(num.begin(), num.end(), x - F[i][k] + i);

    );
}

int main(void)
{
    init();

    int nCase;
    scanf("%d", &nCase);

    ; T<=nCase; T++){

        scanf("%lld %lld", &x, &k);

        printf("Case #%d: %lld\n", T, Solve());
    }
    ;
}

HDU 5936 Difference ( 2016 CCPC 杭州 D && 折半枚举 )的更多相关文章

  1. HDU 5936 Difference 【中途相遇法】(2016年中国大学生程序设计竞赛(杭州))

    Difference Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  2. 2016 ccpc 杭州 D.Difference hdu5936(折半枚举)

    有坑!!!当x==0时,因为y>0,a,b不能同时为0,所以答案要-1 #include<iostream> #include<cstdlib> #include< ...

  3. HDU 5936 Difference(折半搜索(中途相遇法))

    http://acm.hdu.edu.cn/showproblem.php?pid=5936 题意: 定义了这样一种算法,现在给出x和k的值,问有多少个y是符合条件的. 思路: y最多只有10位,再多 ...

  4. HDU 5984.Pocky(2016 CCPC 青岛 C)

    Pocky Let’s talking about something of eating a pocky. Here is a Decorer Pocky, with colorful decora ...

  5. HDU 5936 Difference

    题意: 有一个函数f(y, k) = y的每个十进制位上的数字的k次幂之和 给x, k 求 有多少个y满足 x = f(y, k) - y 思路: (据说这叫中途相遇法?) 由于 x >= 0 ...

  6. 2016 CCPC 杭州站 小结

    5题倒数第一,铜……(我就知道我们很稳!!!哼!! 这一次心态完全爆炸 开场我就没有按照平时的顺序读题 然后zr的A题wa 我F题T xl说B是一个最小生成树,又说是最小树形图,不会写 K题完全没思路 ...

  7. HDU 5918 SequenceI (2016 CCPC长春站 KMP模版变形)

    这个题目的数据应该是比较弱的,赛场上的时候我们暴力也过了,而且我的kmp居然比暴力还要慢-- 这个变形并不难,跳着选数,把漏掉的位置补上就可以了. 代码如下: #include<iostream ...

  8. 2016 ccpc 杭州赛区的总结

    毕竟是在杭电比的,和之前大连的icpc不同,杭电毕竟是隔壁学校,来回吃住全都是在自家寝室,方便! 不过说到方便也是有点不方便,室友都喜欢玩游戏,即使我昨晚9.30就睡觉了,仍然是凌晨一点才睡着,233 ...

  9. hdu 4715 Difference Between Primes (打表 枚举)

    Difference Between Primes Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Jav ...

随机推荐

  1. fiddler笔记:Composer选项卡

    1.Composer选项卡介绍 Composer选项卡功能是可以手动构建和发送HTTP.HTTPS和FTP请求. 支持将Web Session列表中选中的Session拖入Composer选项卡,然后 ...

  2. Java手写简单Linkedlist一(包括增加,插入,查找,toString,remove功能)

    @Java300 学习总结 一.自定义节点 LinkList底层为双向链表.特点为查询效率低,但增删效率高,线程不安全. 链表数据储存在节点,且每个节点有指向上个和下个节点的指针. 创建ggLinke ...

  3. JSONObject,JSONArray,对象,数组互相转化

    json类型对象转化成对象类型 JSONObject.toJavaObject(jsonObj, Object.class) json类型对象转化为List类型 JSONArray.parseArra ...

  4. Java String类源码

    String类的签名(JDK 8): public final class String implements java.io.Serializable, Comparable<String&g ...

  5. [转载]clip gradient抑制梯度爆炸

    [转载]clip gradient抑制梯度爆炸 来源:https://blog.csdn.net/u010814042/article/details/76154391 1.梯度爆炸的影响 在一个只有 ...

  6. 在Windows中 , 如何用leakdiag “自动”检测内存泄露 (自动记录日志)

    一.基本用法 在LeakDiag中选择aaa.exe 然后选择Windows Heap Allocator来跟踪heap的使用,按start开始,等一会按log,然后再stop 会在c:\leakdi ...

  7. Arcgis js之web墨卡托(3857)转经纬度坐标(4326)

    Arcgis js之web墨卡托(3857)转经纬度坐标(4326) 手动转化方法: function mercatorTolonlat(mercator){ var lonlat={x:0,y:0} ...

  8. HTML中由于DIV(块元素)浮动,导致的父元素高度塌陷问题的解决方案

    费话不多说,直接上问题: 1.开始时,页面只有两个DIV的嵌套(见图) 运行结果是: 现在看运行的是正常的,但是当我设置让 class="box2" 的DIV浮动时 运行结果是这样 ...

  9. Asp.net Core 微信小程序支付

    最近要做一个微信小程序支付的功能 在网上找了一下 .net Core做微信支付的博客 和 demo 几乎没有 自己研究了好几天 参考了 很多 大牛的博客 勉强做出来了  因为参数都没有 比如 opid ...

  10. 最简单的SAP云平台开发教程 - 如何开发UI5应用并运行在SAP云平台上

    选择Services Catalog,根据关键字搜索到WebIDE服务,点击超链接打开WebIDE: 进入workspace,选择Git->Clone Repository: 从我的github ...