[hdu3943]K-th Nya Number
挺正常的一道模板题。
f[i][j][k]表示i位的数,有j个4,k个7的方案数。
具体实现的话...我写了发二分答案。。需要注意的是二分时应该是mid=L+(R-L)/2。。不然分分钟爆longlong(unsigned long long党自行退散
其实也可以从左端点开始慢慢爬。。。但总觉得比较蛋疼所以没敢写
由网上题解可得,其实还可以确定答案的位数后,从高位往低位一个一个试= =...复杂度会比二分答案的少个log
需要注意一下对0的特判。。
对于从左端点爬到根再爬到右端点的奇怪姿势一直不敢碰。。药丸的节奏啊= =。。GDOI应该不会出这么sxbk的东西吧(手动立flag?
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
struct poi{
ll k;int id;
}q[];ll ans[];
ll f[][][],ten[];bool u[][][];
int i,j,x,y,X,Y,num;
ll l,r,tmp;
int s[],len; bool cmp(poi a,poi b){return a.k<b.k;}
inline ll get(ll x){
for(tmp=x,len=;tmp;tmp/=)s[++len]=tmp%;
if(!x)s[len=]=;
ll ans=;register int i,j;int sx=X,sy=Y;
if(X+Y>len)return ;
for(i=sx+sy;i<len;i++)
for(j=;j<=;j++)
if((sx||j!=)&&(sy||j!=))ans+=f[i-][sx-(j==)][sy-(j==)];
// printf(" %lld\n",ans);
for(i=;i<s[len];i++)
if((sx||i!=)&&(sy||i!=))ans+=f[len-][sx-(i==)][sy-(i==)];
sx-=s[len]==,sy-=s[len]==;
for(i=len-;i&&sx>=&&sy>=;i--){
for(j=;j<s[i];j++)
if((sx||j!=)&&(sy||j!=))ans+=f[i-][sx-(j==)][sy-(j==)];
sx-=s[i]==,sy-=s[i]==;
}
if(!sx&&!sy&&x)ans++;
// printf(" %lld\n",ans);
return ans+(!X&&!Y);
}
int main(){
f[][][]=f[][][]=;f[][][]=;f[][][]=;
for(i=ten[]=;i<=;i++)ten[i]=ten[i-]*;
for(i=;i<=;i++){
for(x=;x<=i;x++)for(y=i-x;y;y--)
f[i][x][y]=x<=y?(f[i-][x][y]*+f[i-][x-][y]+f[i-][x][y-]):f[i][y][x]
;// ,printf(" %d %d %d %lld\n",i,x,y,f[i][x][y]);
for(x=;x<=i;x++)f[i][x][]=f[i][][x]=f[i-][x-][]+f[i-][x][]*;
f[i][][]=f[i-][][]<<;
// if(i<=3)
// for(x=0;x<=i;x++)for(y=0;y<=i-x;y++)printf(" %d %d %d %lld\n",i,x,y,f[i][x][y]);
}
int T,TT;scanf("%d",&TT);
for(T=;T<=TT;T++){
scanf("%lld%lld%d%d",&l,&r,&X,&Y);scanf("%d",&num);
for(i=;i<=num;i++)scanf("%lld",&q[i].k),q[i].id=i; sort(q+,q++num,cmp);
ans[]=l;
ll lnum=get(l),mx=get(r)-lnum; // printf(" lnum:%lld mx:%lld\n",lnum,mx);
printf("Case #%d:\n",T);
for(i=;i<=num;i++){
ll L=ans[q[i-].id],R=r,mid;
if(q[i].k==q[i-].k){ans[q[i].id]=L;continue;}
if(q[i].k>mx){ans[q[i].id]=-;continue;}
while(L<R){
mid=L+((R-L)>>);//printf(" %lld %lld \n",L,R);
if(get(mid)>=q[i].k+lnum)R=mid;else L=mid+;
}//puts("");
ans[q[i].id]=L;
}
for(i=;i<=num;i++)
if(ans[i]==-)puts("Nya!");else printf("%lld\n",ans[i]);
}
return ;
}
话说网上有些题解遇到极限数据会炸>_<。。
[hdu3943]K-th Nya Number的更多相关文章
- HDU 3943 K-th Nya Number
K-th Nya Number Time Limit: 1000ms Memory Limit: 65536KB This problem will be judged on HDU. Origina ...
- HDU 3943 K-th Nya Number(数位DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3943 题目大意:求出区间 (P,Q] 中找到第K个满足条件的数,条件是该数包含X个4和Y个7 Samp ...
- ACM-ICPC 2018 沈阳赛区网络预赛-K:Supreme Number
Supreme Number A prime number (or a prime) is a natural number greater than 11 that cannot be formed ...
- K - Queries for Number of Palindromes(区间dp+容斥)
You've got a string s = s1s2... s|s| of length |s|, consisting of lowercase English letters. There a ...
- 【ACM-ICPC 2018 沈阳赛区网络预赛 K】Supreme Number
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 显然每个数字只可能是1,3,5,7 然后如果3,5,7这些数字出现两次以上.显然两个3||5||7都能被11整除. 然后1的话最多能 ...
- ACM-ICPC 2016 大连赛区现场赛 K. Guess the number && HDU 5981(思维+DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5981 题意:A在[L, R]之间随机选取一个数X,之后B来猜这个数,如果猜的数比X小,那么A就告诉B猜 ...
- 1. CountDiv 数数有几个 Compute number of integers divisible by k in range [a..b].
package com.code; public class Test05_1 { public static int solution(int A, int B, int K) { // handl ...
- POJ2985 The k-th Largest Group[树状数组求第k大值+并查集||treap+并查集]
The k-th Largest Group Time Limit: 2000MS Memory Limit: 131072K Total Submissions: 8807 Accepted ...
- POJ 2985 The k-th Largest Group(树状数组 并查集/查找第k大的数)
传送门 The k-th Largest Group Time Limit: 2000MS Memory Limit: 131072K Total Submissions: 8690 Acce ...
随机推荐
- 队列queue(1) 结构体实现队列
前言 首先,我们先来做一道解密题:一串数列 7 6 8 6 6 7 0 4 1 ,规定一个回收站,把第一个数删除,添加到回收站里,然后把第二个数排到队伍最末尾,把第三个删除,添加到回 ...
- iOS Button 上文字图片位置的设置
1. 添加图片+文字/文字+图片 ,不分前后,图片默认在文字前边 加空格隔开 UIButton * button =[[UIButton alloc] initWithFrame:CGRectMake ...
- 【NOIP模拟】cut
Description F大爷热爱切树.今天他找到一棵黑白树,不到两秒钟,F大爷就把这棵树切掉了.已知原先树上共n个点,每个点都是黑点或者白点,F大爷切去若干条边后,分成的若干个连通子树中每块恰有一个 ...
- [置顶]
android ListView包含Checkbox滑动时状态改变
题外话: 在xamarin android的开发中基本上所有人都会遇到这个小小的坎,的确有点麻烦,当时我也折腾了好一半天,如果你能看到这篇博客,说明你和我当初也是一样的焦灼,如果你想解决掉这个小小的坎 ...
- openstack操作之二 restful api
Restful api 是openstack各服务调用的接口,简单理解为可以通过网络去调用的函数.postman是一款前端调用工具,测试后端接口的时候往往是使用该工具去验证.在openstack的使用 ...
- Ubuntu中启用ssh服务---转载
ssh程序分为有客户端程序openssh-client和服务端程序openssh-server.如果需要ssh登陆到别的电脑,需要安装openssh-client,该程序Ubuntu是默认安装的.而如 ...
- 1.QT开发第一个程序
Ubuntu16.04安装QT5.8.0:http://www.cnblogs.com/dotnetcrazy/p/6725945.html QT5.8支持中文输入法(附带老版本的解决+不理想的情况解 ...
- Linux发行版 CentOS6.5 禁用防火墙步骤
本文地址http://comexchan.cnblogs.com/,尊重知识产权,转载请注明出处,谢谢! 注意:此操作需要使用root权限执行 首先查询防火墙状态: service iptables ...
- Qt编写QUI皮肤生成器
用Qt写项目写多了,为了满足不同客户的需求,需要定制不同样式的界面,QUI皮肤生成器应运而生.思考这个工具的架构花了一年时间,如何从复杂的配色方案中提取出共性,然后将共性转为具体的QSS文件.思考架构 ...
- 基于阿里云的JavaEE系统框架介绍
基于阿里云的系统框架展望 1) CDN 用于缓存静态文件等等.七牛和阿里的都还可以. 七牛要做的久一点,各种图片处理的接口要完善一些 阿里的CDN要稍微好一点点,但是没有不安全的访问方式,访问稍微没有 ...