HDU 3943 —— K-th Nya Number(數位DP,二分答案)
給定X和Y的值,一個數字用十進位制表示,對於數位4出現恰好X次,7恰好Y次的數字稱為nya數。
然後給P和Q, 後面是一系列查詢, 每個查詢K就是在區間(P,Q]上找到第K個nya數,不存在則輸出Nya!(= = 這是尖叫的意思麼)
因為數字的範圍比較大,又是跟數位有關,所以採取數位DP的演算法。
dp[i][j][k],代表長度為i的數字中有j個4和k個7的個數。
先用遞推的方法預處理出dp陣列。
dp[i][j][k] += dp[i-1][j][k]*8,第i位不是4和7的情況;
dp[i][j+1][k] += dp[i-1][j][k],第i位為4;
dp[i][j][k+1] += dp[i-1][j][k],第i位為7;
然後讀入p和q的時候先計算出對應的區間裡nya數的個數tmp,然後讀入k,如果k超過tmp就輸出Nya!,否則二分出答案。
#include<cstdio> #include<cstring> #define LL long long #define ull unsigned long long ull dp[20][21][21]; void init(){ memset(dp,0,sizeof(dp)); dp[0][0][0]=1; for(int i=1; i<20; i++){ for(int j=0; j<=20; j++){ for(int k=0; k<=20; k++) dp[i][j][k]+=dp[i-1][j][k]*8; } for(int j=0; j<20; j++){ for(int k=0; k<=20; k++){ dp[i][j+1][k]+=dp[i-1][j][k]; dp[i][k][j+1]+=dp[i-1][k][j]; } } } } int x, y; ull query(ull a){ int buf[20]; int len=0; while(a>0){ buf[len++]=(int)(a%10); a/=10; } LL sum=0; int j=x, k=y; for(int i=len-1; i>=0; i--){ if(buf[i]<=4){ sum += (LL)buf[i]*dp[i][j][k]; if(buf[i]==4) j--; } else if(buf[i]<=7){ sum += (LL)(buf[i]-1)*dp[i][j][k]; if(j) sum += dp[i][j-1][k]; if(buf[i]==7) k--; } else{ sum += (LL)(buf[i]-2)*dp[i][j][k]; if(j) sum += dp[i][j-1][k]; if(k) sum += dp[i][j][k-1]; } if(j<0 || k<0) break; } return sum; } int t, n; ull p, q, k, tmp, cur; int main(){ init(); scanf("%d", &t); for(int ct=1; ct<=t; ct++){ printf("Case #%d:\n", ct); scanf("%I64u %I64u %d %d", &p, &q, &x, &y); tmp = query(q+1)-query(p+1); scanf("%d", &n); ull low, top, mid; while(n--){ scanf("%I64u", &k); if(k>tmp){ puts("Nya!"); continue; } low=p+1; top=q; while(low<top){ mid = (low+top)/2; cur = query(mid+1)-query(p+1); if(cur<k) low=mid+1; else top=mid; } printf("%I64u\n", low); } } return 0; }
相關推薦
HDU 3943 —— K-th Nya Number(數位DP,二分答案)
給定X和Y的值,一個數字用十進位制表示,對於數位4出現恰好X次,7恰好Y次的數字稱為nya數。 然後給P和Q, 後面是一系列查詢, 每個查詢K就是在區間(P,Q]上找到第K個nya數,不存在則輸出Nya!(= = 這是尖叫的意思麼) 因為數字的範圍比較大,又是跟數位有關,
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
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!";
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
POJ2104————K-th Number(線段樹,二分法)
K-th Number Time Limit: 20000MS Memory Limit: 65536K Total Submissions: 51227 Accepted: 17511 Case Time Limit: 2000MS Description
【51Nod - 1094】和為k的連續區間 (字首和,二分查詢)
題幹: 一整數數列a1, a2, ... , an(有正有負),以及另一個整數k,求一個區間i,ji,j,(1 <= i <= j <= n),使得aii + ... + ajj = k。 Input 第1行:2個數N,K。N為數列的長度。K為需
CodeForces - 55D(數位dp,離散化)
題目來源:http://codeforces.com/problemset/problem/55/D Volodya is an odd boy and his taste is strange as well. It seems to him that a positive integer numb
HDU 5787 K-wolf Number(數位dp)
blog typedef turn pan con target ack cnblogs freopen http://acm.split.hdu.edu.cn/showproblem.php?pid=5787 題意:給出一個範圍[l,r]和整數k,求出在該範圍的數在十進
【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
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
hdu3709 Balanced Number (數位dp)
careful href multi true search target tar sta total 題目傳送門 Balanced Number Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 6553
P2188 小Z的 k 緊湊數 題解(數位DP)
題目連結 小Z的 k 緊湊數 解題思路 數位DP,把每一個數位的每一個數對應的可能性表示出來,然後求\(num(1,r)-num(1,l-1)\),其中\(num(i,j)\)表示\([i,j]\)區間裡符合要求的數的個數。 其中,\(dp[i][j]\)表示第\(i\)位數字為\(j\)的選擇種數。
3652 B-number(數位DP)
傳送門 B-number Problem Description A wqb-number, or B-number for short, is a non-negative integer whose decimal form contains the sub- st
hdu 2089 記憶化搜尋寫法(數位dp)
/* 記憶化搜尋,第二維判斷是否是6 */ #include<stdio.h> #include<string.h> #define N 9 int dp[N][2],digi
hdu--2089 不要62(數位DP的入門題目)
題目連結:不要62 不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 53366
Balanced Number(數位DP)
it is include 位數 integer 就是 text NPU \n space D - Balanced Number HDU - 3709 A balanced number is a non-negative integer that can be bal
【EOJ3654】管理孩子(貪心,二分答案)
題意:有一棵n個點的樹,其中有k個是關鍵點,將樹分割成若干部分,每部分至少包含一個關鍵點,求最大分割大小的最小值 思路: 最後特判一下f[1]的值 1 #include<cstdio> 2 #include<cstring> 3 #include<st
Android-BAT面試題整理(java篇,含答案)
結尾: 如果你是正在找工作,3分理解7分背,先把offer搞下來再說,知識點太多,全部搞懂不太實際。 如果你還在職,正在物色你喜歡的公司,7分理解3分背,掌握基礎鞏固知識,針對你想進的公司,想進的部門的內容去學習,因為時間比較充裕。 不過無論如何請記住,理解才是王道,所有高深的技術點都是基於基礎知識去延伸的,
983B XOR-pyramid(區間dp,異或)
#include<algorithm> #include<iostream> #include<cstdlib> #include<cstring> #include<cstdio> #include<cmath> #include&l