1. 程式人生 > >【題解】洛谷P2022 有趣的數

【題解】洛谷P2022 有趣的數

題解半天看不懂系列。。。

這裡可以模擬一下,我們首先要求數值比k小,但字典序在k前面的數的數量,用cnt表示。這裡為了方便,我們可以採用程式碼中的方式計算。然後特判無解的情況。接著我們對比k大、字典序在k前面數的數量嗎,逐漸擴大N,以K的10^i擴大,當ans>m時,ans=(k*10^i-(ans-(M-1)+1))//減出多餘的部分。

#include<cstdio>
#include<iostream>
using namespace std;
long long base=1,k,m,n,cnt=0;
int main()
{
	cin>>k>>m;
	for(;base<=k;base*=10)
	{
		cnt+=k/base-base+1;
	}
	cnt--;
	base/=10;
	if(cnt>=m||cnt!=m-1&&base==k)
	{
		cout<<0;
		return 0;
	}
	for(base=k-base,n=k;cnt<m-1;)
	{
		n=n*10;
		base=base*10;
		cnt+=base;
	}
	cout<<max(n-cnt+m-2,k);
	return 0;
}

相關推薦

題解P2022 有趣

題解半天看不懂系列。。。 這裡可以模擬一下,我們首先要求數值比k小,但字典序在k前面的數的數量,用cnt表示。這裡為了方便,我們可以採用程式碼中的方式計算。然後特判無解的情況。接著我們對比k大、字典序在k前面數的數量嗎,逐漸擴大N,以K的10^i擴大,當ans>m時,

題解P1012拼[NOIP1998] 字串+排序

題目連結 乍一看還有點唬人……結果簡單的一批 #include<cstdio> #include<iostream> #include<algorithm> using namespace std; #define _

題解P1975排序

space getchar() class std -- names char 圖書管理員 wap 分塊,註意重復的值之間的處理。跟普通分塊的操作一樣的啦,具體可以參見‘不勤勞的圖書管理員’。 #include <bits/stdc++.h> using na

題解P2418 yyy loves OI IV

轉移 || 暴力 兩種 clu OS AD spa IT 感覺很是妙啊……這題數次誤入歧途...最開始想的二維dp,單調隊列優化;無果,卒。於是沒忍住看了下標簽:暴力枚舉?搜索?於是開始想記憶化搜索。以為會有什麽很強的剪枝之類的;30分,卒。最後終於回到正道上:50 000

題解6月月賽 —— 「數學」約數個數和

分解 pri clas left pac 這樣的 DC 兩個 探測   看德國戰墨西哥去了結果發現比賽只剩下30分鐘……當然之後又思考這題挺久也還是不會做。看了一下題解,覺得這個做法挺厲害的,在這裏記錄一下:   原式實際上就是:(\(K +=

題解P1941 [NOIP2014TG] 飛揚的小鳥(揹包DP)

次元傳送門:洛谷P1941 思路 從題意可知 在每個單位時間內 可以無限地向上飛 但是隻能向下掉一次 所以我們可以考慮運用揹包解決這道題 上升時 用完全揹包 下降時 用01揹包 設f[x][y]為在座標(x,y)時的最小點選螢幕次數 當飛到天花板時和撞到柱子時特判 一開始設ans為極大值 如

題解P1315 [NOIP2011TG] 觀光公交(字首和+貪心)

次元傳送門:洛谷P1315 思路 思路大概想到了 可是程式碼實現卻沒想到 所以參考題解了 D2T3的貪心果然有難度 我們考慮在每次用加速器有兩種情況 到下一個點還需要等待:以後的時間就不再影響了 到下一個點不需要等待:那麼就會影響到後面的時間直到出現情況1(或者到最後一個點) 用sum

題解P1373 小a和uim之大逃離(座標DP)

次元傳送門:洛谷P1373 思路 設f[i][j][t][1/0]表示走到(i,j)時 小a減去uim的差值為t 當前是小a取(0) uim取(1) 那麼轉移就很明顯了 f[i][j][t][0]=(f[i][j][t][0]+f[i-1][j][(t-map[i][j]+k)%k][1])%1

題解P1273 有線電視網(樹上分組揹包)

次元傳送門:洛谷P1273 思路 一開始想的是普通樹形DP 但是好像實現不大好 觀摩了一下題解 是樹上分組揹包 設f[i][j]為以i為根的子樹中取j個客戶得到的總價值 我們可以以i為根有j組 在每一組中分別又取1個,2個,3個......n個客戶 化為揹包思想即 j為一共有j組 揹包容量為每

題解 1120 小木棍 [資料加強版]

原題 剪枝好題,可以有以下9個剪枝(基本上都是可行性剪枝,還有一些搜尋順序的剪枝),這是一道除了生日蛋糕以外的剪枝好題當然不會告訴你Biscuit46花了1h做這道題目 #include<stdio.h> #include<stdlib.h> #include<strin

題解P1169 [ZJOI2007] 棋盤製作(座標DP+懸線法)

次元傳送門:洛谷P1169 思路 浙江省選果然不一般 用到一個從來沒有聽過的演算法 懸線法: 所謂懸線法 就是用一條線(長度任意)在矩陣中判斷這條線能到達的最左邊和最右邊及這條線的長度 即可得到這個矩陣的最大值 那麼我們定義3個數組 l[i][j]表示(i,j)能到達最左邊的座標 r[i][j]

題解P2577 [ZJOI2005] 午餐(DP+貪心)

次元傳送門:洛谷P2577  思路 首先貪心是必須的 我們能感性地理解出吃飯慢的必須先吃飯(結合一下生活) 因此我們可以先按吃飯時間從大到小排序 然後就能自然地想到用f[i][j][k]表示前i個人在第一個視窗排隊用了j時間 在第二個視窗排隊用了k時間 然後就自然地炸空間了 所以我們要

題解P1070 道路遊戲(線性DP)

次元傳送門:洛谷P1070 思路 一開始以為要用什麼玄學優化 沒想到O3就可以過了 我們只需要設f[i]為到時間i時的最多金幣 需要倒著推回去 即當前值可以從某個點來 那麼狀態轉移方程為: f[i]=max(f[i],f[i-k]+val-cost[now]); now表示從now這個

題解P3959 [NOIP2017TG] 寶藏(狀壓DP+DFS)

洛谷P3959:https://www.luogu.org/problemnew/show/P3959 前言 NOIP2017時還很弱(現在也很弱 看出來是DP 但是並不會狀壓DP 現在看來思路並不複雜 只是存狀態有點難想到 思路 因為n最大為12 所以可以想到是狀壓  

題解P1879 [USACO06NOV] Corn Fields(狀壓DP)

洛谷P1879:https://www.luogu.org/problemnew/show/P1879 思路 把題目翻譯成人話 在n*m的棋盤 每個格子不是0就是1 1表示可以種 0表示不能種 相鄰的格子不能同時種 求總方案數 把每行看成一個n位的2進位制數 預處理出每行的狀態後 進行DP

題解P1896 [SCOI2005] 互不侵犯(狀壓DP)

洛谷P1896:https://www.luogu.org/problemnew/show/P1896 前言 這是一道狀壓DP的經典題  原來已經做過了 但是快要NOIP 複習一波 關於一些位運算的知識點參考: https://blog.csdn.net/fox641941

題解P2375 [NOI2014] 動物園(KMP)

洛谷P2375:https://www.luogu.org/problemnew/show/P2375 思路 這道題可以說是完全重新整理了本蒟蒻對KMP的理解 感覺對next陣列的理解上升到一個新的高度 首先題目給出了next陣列的定義 關於整個字串 next[len]為字首與字尾相同的最

題解P3865 ST表

題目連結 #include<cstdio> #include<algorithm> #include<cmath> using namespace std; const int N=1e5+10; inline int read() { i

題解P2678 跳石頭(二分)

1-1e9二分答案,設其為最短距離。判斷如果該距離可以就向上二分(單調遞增,求最大值),注意判斷mid+1可以避免邊界問題。 判斷函式統計移走石頭個數,如果相鄰石頭之間距離比要的最短距離還小就移走。移走石頭個數小於M就返回true #include<cstdio&g

題解P1403[AHOI2005]約數研究 數學知識

題目連結 題目描述 科學家們在Samuel星球上的探險得到了豐富的能源儲備,這使得空間站中大型計算機“Samuel II”的長時間運算成為了可能。由於在去年一年的辛苦工作取得了不錯的成績,小聯被允許用“Samuel II”進行數學研究。 小聯最近在研究