HDU 5936 2016CCPC杭州 D: Difference(折半枚举)
题意:
给你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(折半枚举)相关推荐
- 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 ...
- HDU 5938 2016CCPC杭州 F: Four Operations
题意: 将+-x/四个符号按顺序塞入一串字符中,让它成为一个表达式 求表达式能得到的最大值 枚举'-'的位置,'x'一定挨着'-'的后面,'/'一定挨着'x'的后面 然后'+'的位置要不在'-'的前面 ...
- HDU 5937 2016CCPC杭州 E: Equation(DFS)
题意: 你有'0'-'9'这9个数字各xi个,问同时能用这些数字组成少个不同的等式 等式形如:A+B=C,其中每个字母都是1个数字,并且1+2=3和2+1=3算不同情况 总共只有36种不同算式,当数据 ...
- HDU 5943 2016CCPC杭州 K: Kingdom of Obsession(二分匹配)
题意:给你一张二分图,左边是s+1到s+n这n个数,右边是1到n这n个数 如果x在左边,y在右边,且x%y==0,那么x可以和y匹配,问这个二分图是否存在完美匹配 如果左边有两个以上的质数出现,那么一 ...
- HDU 5934 2016CCPC杭州 B: Bomb(Trajan强连通)
题意: 坐标系上有n个炸弹,每个炸弹都有不同的爆炸半径,并且爆炸会引起连锁反应,如果一个炸弹爆炸,那么在这个炸弹的爆炸半径内所有的炸弹都会跟着引爆,你要引爆所有的炸弹,引爆每个炸弹都有不同的引爆代价, ...
- HDU 5935 2016CCPC杭州 C: Car
这题题意好难懂: 有一辆速度只会越来越快的车,一开始速度为0,并且在坐标为0的点上,之后开始向右加速 中间会进行n次检查,第i次检查ci,表示在某个时间(刚好是整点)汽车刚好到了某个整点坐标上 求汽车 ...
- HDU 5933 2016CCPC杭州 A: ArcSoft's Office Rearrangement
题意: 有n个数,每次可以将相邻的两个数合并成一个更大的数,也可以将一个数拆分成两个不为0的数 问至少经过多少次操作可以使最终序列为k个一样大的数,如果不可能做到输出-1 当所有数的和不是k的倍数就是 ...
- 【HDU 5936 --- Difference】折半枚举+二分
[HDU 5936 --- Difference]折半枚举+二分 Description Little Ruins is playing a number game, first he chooses ...
- Subset POJ - 3977(折半枚举+二分+二进制枚举)
题意: 给你一个集合N(N<=35),问集合的子集,除了空集,使得自己中所有元素和的绝对值最小,若存在多个值,那么选择子集中元素最少的那个. 题目: Given a list of N inte ...
最新文章
- Spring IoC 学习(3)
- 【实用】批量成本估算
- 2013 QConf上海软件开发大会总结
- 2015-03-12---外观模式,建造者模式(附代码),观察者模式(附代码),boost库应用
- [转]Eclipse下的JavaScript编辑器中文无法保存问题解决
- 如何避免程序员和产品经理打架?“微服务”或将成终极解决方案
- leetcode python3 简单题7.Reverse integer
- 《R语言机器学习:实用案例分析》——1.3节使用函数
- 班级管理servlet项目开发详细讲解,其中涉及js、jq、ajax、等多项技术合计,本项目来源自网络,如有雷同,请私聊博主
- 8大轻型网管工具,网络管理好帮手
- c语言 可以得什么软件下载,用C语言的软件哪可以下载啊?
- Kettle入门案例
- mac苹果电脑使用耳机听不到声音
- 如何做出优雅的过渡效果? Dotween插件的简单介绍及示例代码
- mysql定义取值范围_mysql的decimal类型取值范围
- NSIS 头文件介绍_TextFunc.nsh(2)
- 单片机的AVCC、AVSS、DVCC、DVSS引脚有何区别?
- Git常用命令(汇总)
- 关于App不同方式更新的测试点归纳
- 关于SEO(搜索引擎优化)的个人掌握知识分享
热门文章
- python手机版下载-qpython手机版下载
- python基础教程廖雪峰云-Python 爬虫:把廖雪峰的教程转换成 PDF 电子书
- python读法-python怎么读sql数据?
- 基于非特定人语音识别芯片的技术方案
- swiper切换按钮位置改变_2019-01-18左右按钮控制swiper轮播图切换
- oracle10g无监听配置文件,关于监听配置文件listener.ora的问题
- 【贪心】蓝桥2019:最大降雨量
- python manager_详解Python的Django框架中Manager方法的使用
- 218.94.78.76:20001/index.php,详解spring中使用Elasticsearch的实例教程
- mysql 数据库乱码的解决办法_数据库 MySQL中文乱码解决办法总结