HDOJ3943 K-th Nya Number
題意:在(P,Q】區間內,第K大的滿足條件的數是多少
條件是:數位中有X個4,Y個7
分析:
有X個4,Y個7是很簡單的數位dp
dp【pos】【x】【y】:當前pos位,現在已經有了x個4,y個7
注意可以有個小剪枝,即x不能超過X,y不能超過Y
二分的方法與HDOJ 3271 SNIBB相同
注意開閉區間
二分的時候,求符合條件的解的時候,用個變數記錄每次二分後,符合條件的值
分析見程式碼
注意2的63次方,需要long long
#include<map> #include<set> #include<math.h> #include<time.h> #include<iostream> #include<cstdio> #include<queue> #include<stack> #include<stdio.h> #include<cstring> #include<string.h> #include<algorithm> #include<cstdlib> using namespace std; #define lson rt<<1,l,mid #define rson rt<<1|1,mid+1,r #define ll rt<<1 #define rr rt<<1|1 #define LL long long #define ULL unsigned long long #define maxn 1050 #define maxnum 1000050 #define eps 1e-6 #define input freopen("input.txt","r",stdin) #define output freopen("output.txt","w",stdout) LL dp[25][25][25]; int digit[25]; int X,Y; LL dfs(int pos,int x,int y,bool flag){ if (pos==0) return x==X&&y==Y; if (flag&&dp[pos][x][y]!=-1) return dp[pos][x][y]; int up=flag?9:digit[pos]; LL ans=0; for(int i=0;i<=up;i++){ if (x==X&&i==4) continue; if (y==Y&&i==7) continue; ans+=dfs(pos-1,x+(i==4?1:0),y+(i==7?1:0),flag||i<up); } if (flag) dp[pos][x][y]=ans; return ans; } LL calc(LL x){ int len=0; while(x){ digit[++len]=x%10; x/=10; } return dfs(len,0,0,0); } int main(){ //input; int T,n; scanf("%d",&T); for(int Case=1;Case<=T;Case++){ memset(dp,-1,sizeof(dp)); LL P,Q; scanf("%I64d%I64d%d%d%d",&P,&Q,&X,&Y,&n); LL limit=calc(P); printf("Case #%d:\n",Case); for(int i=0;i<n;i++){ LL l=P+1,r=Q+1,K,m; //l是第一個符合條件的數 //r是第一個不符合條件的數 //在二分判斷的過程中,用l做可行解的記錄 //相當於添加了一個ans變數 scanf("%I64d",&K); while(l<r){ m=(l+r)>>1; if (calc(m)-limit<K) l=m+1; else r=m; } if (l==Q+1) cout<<"Nya!"<<endl; else printf("%I64d\n",l); } } return 0; }
相關推薦
HDOJ3943 K-th Nya Number
題意:在(P,Q】區間內,第K大的滿足條件的數是多少 條件是:數位中有X個4,Y個7 分析: 有X個4,Y個7是很簡單的數位dp dp【pos】【x】【y】:當前pos位,現在已經有了x個4,y個7 注意可以有個小剪枝,即x不能超過X,y不能超過Y 二分的方法與HDO
K-th Nya Number(HDU-3943)
Problem Description Arcueid likes nya number very much. A nya number is the number which has exactly X fours and Y sevens(If X=2 and Y=3
HDU 3943 —— K-th Nya Number(數位DP,二分答案)
給定X和Y的值,一個數字用十進位制表示,對於數位4出現恰好X次,7恰好Y次的數字稱為nya數。 然後給P和Q, 後面是一系列查詢, 每個查詢K就是在區間(P,Q]上找到第K個nya數,不存在則輸出Nya!(= = 這是尖叫的意思麼) 因為數字的範圍比較大,又是跟數位有關,
K-th Nya Number (數位dp+二分)
Arcueid likes nya number very much. A nya number is the number which has exactly X fours and Y sevens(If X=2 and Y=3 , 172441277 and 477
HDU 3943 K-th Nya Number (數位DP)
HDU 3943 K-th Nya Number 用X個4和Y個7的數為規定的數,然後就是區間統計。 先預處理好dp[i][j][k]表示I位的數中有j個4和k個7的數量。 之後就可以通過高位開始列舉,求出區間內有多少個規定的數,如果詢問大於總數,則輸出"Nya!";
【HDU3943】【K-th Nya Number】【數位+二分找位置】
K-th Nya NumberTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 125536/65536 K (Java/Others) Total Submission(s): 2493 Accepte
HDU 3943 K-th Nya Number(數位dp+二分)
Arcueid likes nya number very much. A nya number is the number which has exactly X fours and Y sevens(If X=2 and Y=3 , 172441277 and 47770142 are nya numbe
POJ 2104 K-th Number(區間第k大數)(平方切割,歸並樹,劃分樹)
ac代碼 deb rank turn tracking line 查看 div 能夠 題目鏈接: http://poj.org/problem?id=2104 解題思路: 由於查詢的個數m非常大。樸素的求法無法在規定時間內求解。因此應該選用合理的方式維護數據來做到高效
POJ 2104 K-th Number(主席樹)
ber sca first n) 次數 example == scan sorted K-th Number Time Limit: 20000MS Memory Limit: 65536K Total Submissions: 5742
POJ 2104 K-th Number (主席樹)
std +++ esp space ctype == string uniq upd 題意:給定一個序列,然後有 q 個詢問,每次詢問 l - r 區間內的第 k 大的值。 析:很明顯的主席樹,而且還是裸的主席樹,先進行離散化,然後用主席樹進行查詢就好。 代碼如下: #p
[POJ 2104]K-th Number
n) 劃分樹 tput lease lap form 我們 歸並 nts Description You are working for Macrohard company in data structures department. After failing your
K-th Number
nts include cnblogs number after push bits 方法 must K-th Number Time Limit: 20000MS Memory Limit: 65536K Total Submissions
POJ 2104 K-th Number
poj 2104 working lan 只需要 please lin absolut input nlogn Time Limit: 20000MS Memory Limit: 65536K Total Submissions: 5948
hdu 6231 -- K-th Number(二分+尺取)
lld name scrip string php doesn title frame review 題目鏈接 Problem Description Alice are given an array A[1..N] with N numbers.Now Alic
POJ2104:K-th Number——題解
nbsp dash str sdi targe ash sum queue sin http://poj.org/problem?id=2104 題目大意:求區間第k小。 ———————
整體二分初識--POJ2104:K-th Number
只需要 區域 左右 gif max 技術 因此 space efi n<=100000個數有m<=5000個詢問,每次問區間第k大。 方法一:主席樹!…… 方法二:整體二分。 整體二分一次性計算半個值域對一個區間的詢問的貢獻,然後根據“這半邊的貢獻在某個詢問中可
POJ 2104 K-th Number ( 求取區間 K 大值 )
二分法 esp size 麻煩 == 平方分割 closed push_back ret 題意 : 給出一個含有 N 個數的序列,然後有 M 次問詢,每次問詢包含 ( L, R, K ) 要求你給出 L 到 R 這個區間的第 K 大是幾 分析 : 求取區間 K 大值是
poj2104 K-th Number
per scanf algo using clas urn space n) mat 思路: 平方分割。 實現: 1 #include <cstdio> 2 #include <algorithm> 3 #include <vector
Poj 2104 K-th Number 主席樹模版題
OS tdi pda sig signed begin ostream air color 題意:離線詢問[l,r]區間第k大 題解:模版題,入門題 #include <iostream> #include <cstdio> #inclu
POJ-2104 K-th Number CDQ分治
col 分享圖片 pri 找到 oid play out else mes 題目傳送門 題意:給你一個序列,長度為n,m次詢問,詢問一段區間的第k大。 題解:CDQ分治,對整個值域進行分治。每次取一個mid, 計算出整個區間內mid <= 的數目,如果 num >