题意:

给你x和k,问你有多少个y满足题上的两个公式

y的位数不会超过10位,因为如果超过十位的话f(y, k)-y一定是个负数

比如假设y是11位,那么f(y, k)最大值是9^9*11它只有10位

这样可以将y强行填到10位,比如y=236,那么就让y=0000000236

这样就不用判断位数了

之后暴力出前5位的所有情况(0-99999)

举个例子:假设当时是25436,k为6,那么当前值就是2^6+5^6+4^6+3^6+6^6-25436*100000

将算出来的100000个值存到L[]数组里排个序,注意每个k都要这样算一次

然后再暴力算出后5位的所有情况(0-99999)

和上面一样的:假设当时是25436,k为6,那么当前值就是2^6+5^6+4^6+3^6+6^6-25436

将算出来的100000个值存到R[]数组里排个序,每个k都要这样算一次仍然

O(nklog(n)) (n=100000)的复杂度预处理结束后

每次询问x, k相当于找到有多少组R[]+L[]==x,因为R和L都是有序,这样就可以O(n)计算了

总复杂度O(nklog(n)+Tn)

注意当x=0时答案要-1,因为y!=0

#include<stdio.h>
#include<math.h>
#include<algorithm>
using namespace std;
#define LL long long
LL L[12][100005], R[12][100005], cnt[12], p[12][12];
int main(void)
{LL T, x, k, i, j, q, temp, sum, ans, cas = 1;for(i=0;i<=9;i++){p[i][1] = i;for(j=2;j<=9;j++)p[i][j] = p[i][j-1]*i;}for(k=1;k<=9;k++){for(i=0;i<=99999;i++){sum = 0;temp = i;for(j=1;j<=5;j++){sum += p[temp%10][k];temp /= 10;}L[k][++cnt[k]] = sum-i*100000;R[k][cnt[k]] = sum-i;}sort(L[k]+1, L[k]+cnt[k]+1);sort(R[k]+1, R[k]+cnt[k]+1);}scanf("%lld", &T);while(T--){ans = 0;scanf("%lld%lld", &x, &k);q = cnt[k];for(i=1;i<=cnt[k];i++){if(i!=1 && R[k][i]==R[k][i-1]){ans += sum;continue;}sum = 0;if(q<=0)  break;while(R[k][i]+L[k][q]>x && q>=1)  q--;while(R[k][i]+L[k][q]==x && q>=1)  q--, sum++;ans += sum;}if(x==0)ans--;printf("Case #%lld: %lld\n", cas++, ans);}return 0;
}

HDU 5936 2016CCPC杭州 D: Difference(折半枚举)相关推荐

  1. HDU 5942 2016CCPC杭州 J: Just a Math Problem(莫比乌斯函数)

    题意: 已知f(k)为k的质因子数 求∑2^f(k)  (1<=k<=n) 发现现在做什么题程序都特别慢...14866/15000ms真刺激 因为f(k)是k的质因子个数 那么2^f(k ...

  2. HDU 5938 2016CCPC杭州 F: Four Operations

    题意: 将+-x/四个符号按顺序塞入一串字符中,让它成为一个表达式 求表达式能得到的最大值 枚举'-'的位置,'x'一定挨着'-'的后面,'/'一定挨着'x'的后面 然后'+'的位置要不在'-'的前面 ...

  3. HDU 5937 2016CCPC杭州 E: Equation(DFS)

    题意: 你有'0'-'9'这9个数字各xi个,问同时能用这些数字组成少个不同的等式 等式形如:A+B=C,其中每个字母都是1个数字,并且1+2=3和2+1=3算不同情况 总共只有36种不同算式,当数据 ...

  4. HDU 5943 2016CCPC杭州 K: Kingdom of Obsession(二分匹配)

    题意:给你一张二分图,左边是s+1到s+n这n个数,右边是1到n这n个数 如果x在左边,y在右边,且x%y==0,那么x可以和y匹配,问这个二分图是否存在完美匹配 如果左边有两个以上的质数出现,那么一 ...

  5. HDU 5934 2016CCPC杭州 B: Bomb(Trajan强连通)

    题意: 坐标系上有n个炸弹,每个炸弹都有不同的爆炸半径,并且爆炸会引起连锁反应,如果一个炸弹爆炸,那么在这个炸弹的爆炸半径内所有的炸弹都会跟着引爆,你要引爆所有的炸弹,引爆每个炸弹都有不同的引爆代价, ...

  6. HDU 5935 2016CCPC杭州 C: Car

    这题题意好难懂: 有一辆速度只会越来越快的车,一开始速度为0,并且在坐标为0的点上,之后开始向右加速 中间会进行n次检查,第i次检查ci,表示在某个时间(刚好是整点)汽车刚好到了某个整点坐标上 求汽车 ...

  7. HDU 5933 2016CCPC杭州 A: ArcSoft's Office Rearrangement

    题意: 有n个数,每次可以将相邻的两个数合并成一个更大的数,也可以将一个数拆分成两个不为0的数 问至少经过多少次操作可以使最终序列为k个一样大的数,如果不可能做到输出-1 当所有数的和不是k的倍数就是 ...

  8. 【HDU 5936 --- Difference】折半枚举+二分

    [HDU 5936 --- Difference]折半枚举+二分 Description Little Ruins is playing a number game, first he chooses ...

  9. Subset POJ - 3977(折半枚举+二分+二进制枚举)

    题意: 给你一个集合N(N<=35),问集合的子集,除了空集,使得自己中所有元素和的绝对值最小,若存在多个值,那么选择子集中元素最少的那个. 题目: Given a list of N inte ...

最新文章

  1. Spring IoC 学习(3)
  2. 【实用】批量成本估算
  3. 2013 QConf上海软件开发大会总结
  4. 2015-03-12---外观模式,建造者模式(附代码),观察者模式(附代码),boost库应用
  5. [转]Eclipse下的JavaScript编辑器中文无法保存问题解决
  6. 如何避免程序员和产品经理打架?“微服务”或将成终极解决方案
  7. leetcode python3 简单题7.Reverse integer
  8. 《R语言机器学习:实用案例分析》——1.3节使用函数
  9. 班级管理servlet项目开发详细讲解,其中涉及js、jq、ajax、等多项技术合计,本项目来源自网络,如有雷同,请私聊博主
  10. 8大轻型网管工具,网络管理好帮手
  11. c语言 可以得什么软件下载,用C语言的软件哪可以下载啊?
  12. Kettle入门案例
  13. mac苹果电脑使用耳机听不到声音
  14. 如何做出优雅的过渡效果? Dotween插件的简单介绍及示例代码
  15. mysql定义取值范围_mysql的decimal类型取值范围
  16. NSIS 头文件介绍_TextFunc.nsh(2)
  17. 单片机的AVCC、AVSS、DVCC、DVSS引脚有何区别?
  18. Git常用命令(汇总)
  19. 关于App不同方式更新的测试点归纳
  20. 关于SEO(搜索引擎优化)的个人掌握知识分享

热门文章

  1. python手机版下载-qpython手机版下载
  2. python基础教程廖雪峰云-Python 爬虫:把廖雪峰的教程转换成 PDF 电子书
  3. python读法-python怎么读sql数据?
  4. 基于非特定人语音识别芯片的技术方案
  5. swiper切换按钮位置改变_2019-01-18左右按钮控制swiper轮播图切换
  6. oracle10g无监听配置文件,关于监听配置文件listener.ora的问题
  7. 【贪心】蓝桥2019:最大降雨量
  8. python manager_详解Python的Django框架中Manager方法的使用
  9. 218.94.78.76:20001/index.php,详解spring中使用Elasticsearch的实例教程
  10. mysql 数据库乱码的解决办法_数据库 MySQL中文乱码解决办法总结