-
个人简介
```#include<bits/stdc++.h> using namespace std; #define int long long int digit[15]; int dp[15][105][2][2]; int n,k; int dfs(int pos,int sum,bool limit,bool lead){ if (pos == 0) { return !lead && sum <= k; } if (dp[pos][sum][limit][lead] != -1) return dp[pos][sum][limit][lead]; int ans = 0; int up = limit ? digit[pos] : 9; for (int i = 0; i <= up; ++i) { bool new_limit = limit && (i == up); bool new_lead = lead && (i == 0); int new_sum = sum; if(!new_lead) new_sum += i; if(new_sum > k) continue; ans += dfs(pos-1, new_sum, new_limit, new_lead); } return dp[pos][sum][limit][lead] = ans; } int count(int len){ int x=0; for(int i=0;i<len;i++) x = x*10 +9; int cnt = 0; while(x){ digit[++cnt] = x%10; x /=10; } memset(dp,-1,sizeof(dp)); return dfs(cnt,0,1,1); } signed main(){ int T; cin>>T; while(T--){ cin>>n>>k; cout<<count(n)<<endl; } }language#include<bits/stdc++.h> using namespace std; #define int long long int digit[15]; int dp[15][105][2][2]; int n,k; int dfs(int pos,int sum,bool limit,bool lead){ if (pos == 0) { return !lead && sum <= k; } if (dp[pos][sum][limit][lead] != -1) return dp[pos][sum][limit][lead]; int ans = 0; int up = limit ? digit[pos] : 9; for (int i = 0; i <= up; ++i) { bool new_limit = limit && (i == up); bool new_lead = lead && (i == 0); int new_sum = sum; if(!new_lead) new_sum += i; if(new_sum > k) continue; ans += dfs(pos-1, new_sum, new_limit, new_lead); } return dp[pos][sum][limit][lead] = ans; } int count(int len){ int x=0; for(int i=0;i<len;i++) x = x*10 +9; int cnt = 0; while(x){ digit[++cnt] = x%10; x /=10; } memset(dp,-1,sizeof(dp)); return dfs(cnt,0,1,1); } signed main(){ int T; cin>>T; while(T--){ cin>>n>>k; cout<<count(n)<<endl; } } ``
```language ```#include<bits/stdc++.h> using namespace std; #define int long long int digit[20]; int dp[20][2][2]; int x; int dfs(int pos, bool limit, bool lead) { if(pos==0) return 1; if(dp[pos][limit][lead]!=-1) return dp[pos][limit][lead]; int ans=0; int up=limit? digit[pos]:9; for(int i=0;i<=up;i++) { if(i==x) continue; bool new_limit=limit&&(i==up); bool new_lead=lead&&(i==0); if(lead&&i==0) ans+=dfs(pos-1,new_limit,new_lead); else ans+=dfs(pos-1,new_limit,new_lead); } return dp[pos][limit][lead]=ans; } int count(int n) { if(n<0) return 0; int cnt=0; int tmp=n; while(tmp) { digit[++cnt]=tmp%10; tmp/=10; } memset(dp,-1,sizeof(dp)); return dfs(cnt,1,1); } signed main() { int T; cin>>T; while(T--) { int n; cin>>n>>x; cout<<count(n)<<endl; } return 0; } -
通过的题目
-
最近活动
- 20260325-入门班-简单模拟01 IOI
- 2026.03.22中级 OI
- 20260321-sort() IOI
- 20260308-初级班-广度优先搜索 IOI
- 20260306-入门班-结构体专题 IOI
- 2026寒假综合测试 IOI
- 20260118-初级班-期末测试 OI
- 中高级班期末测试 OI
- 【特长生】线性DP专项测试 OI
- 2025高级班进阶赛-字符串 OI
- 2025初级班测试2 OI
- 2025特长生测试2 OI
- 2025特长生测试1 OI
- 2025中级班期中测试 OI
- 2025零基础-初级班阶段性检测 OI
- 2025入门班期中检测 OI
- CSP-J 2019真题卷 OI
- 9月综合测试卷 OI
- 暑期集训测试6(中高级班) OI
- CSP-J 2024真题卷(中级班) OI
- 暑期集训测试5:区间DP专题(中高级班) OI
- 暑期集训测试卷4(中高级班) OI
- 暑期集训测试卷3(中高级班) OI
- 暑期集训测试卷2(中高级班) OI
- 暑期集训测试卷1(中高级班) OI
-
最近编写的题解
题目标签
- 计算几何
- 9
- 字符串
- 8
- 模拟
- 6
- 数学
- 6
- 分支结构
- 5
- 图论
- 3
- 素数判断
- 2
- 质数
- 2
- 筛法
- 2
- 树形数据结构
- 2
- 栈
- 2
- 顺序结构
- 2
- 语言入门
- 1
- 动态规划 DP
- 1
- 数组
- 1
- 哈希 hashing
- 1
- 循环结构
- 1
- 高精度
- 1