【学习笔记】Baekjoon-23510 Wise man

可以做😅

首先要做过这道题 [AGC061E] Increment or XOR

考虑记录个位上的数字以及末尾 0 0 0的个数,发现每次加的数 < 10 <10 <10,因此每次向高位进位时末尾 0 0 0的数目都会增加,这样不会超过 log ⁡ m \log m logm轮

发现模完 m m m后的数一定 < 10 <10 <10,因此存在循环节,直接模拟即可

cpp 复制代码
#include<bits/stdc++.h>
#define fi first
#define se second
#define pb push_back
#define ll long long
using namespace std;
ll a,m,n;
int to[10][65][10];
ll f[10][65][10],fac[20];
int calc(ll x){
    int mx=0;while(x)mx=max(mx,(int)(x%10)),x/=10;
    return mx;
}
void work(){
    if(a==0){
        cout<<0;
        exit(0);
    }
    while(n&&a<10){
        a+=calc(a),n--;
        if(a>=m)return;
    }
    if(a==0){
        cout<<0;
        exit(0);
    }
    if(n==0){
        cout<<a;
        exit(0);
    }
    int i=1;while(a/fac[i]%10==0)i++;
    int x=calc(a/10);
    while(i&&(a-a%10+fac[i]+to[x][i-1][a%10]>=m||n<f[x][i-1][a%10])){
        i--;
    }
    if(i>0){
        n-=f[x][i-1][a%10],a=a-a%10+fac[i]+to[x][i-1][a%10];
    }
    else{
        while(n&&a<m){
            a+=calc(a),n--;
        }
    }
}
void solve(){
    while(n&&a<m)work();
    a%=m;
}
ll v[10];
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0),cout.tie(0);
    cin>>a>>m>>n,n--;fac[0]=1;for(int i=1;i<=18;i++)fac[i]=fac[i-1]*10;
    for(int j=0;j<=60;j++){
        for(int i=0;i<10;i++){
            for(int k=0;k<10;k++){
                if(i==0&&k==0)continue;
                if(j==0){
                    int x=k,s=0;
                    while(x<10)x+=max(x,i),s++;
                    to[i][j][k]=x%10,f[i][j][k]=s;
                }
                else{
                    int x=k;ll s=0;
                    for(int l=0;l<=9;l++){
                        s+=f[max(i,l)][j-1][x],x=to[max(i,l)][j-1][x];
                    }to[i][j][k]=x,f[i][j][k]=s;
                }
            }
        }
    }
    solve();
    while(n){
        if(v[a]){
            n%=v[a]-n;
            break;
        }
        v[a]=n;
        solve();
    }
    while(n){
        solve();
    }
    cout<<a;
}
相关推荐
cwtlw36 分钟前
Spring相关面试题总结
java·笔记·后端·spring
zzh-43 分钟前
Scala循环守卫
笔记
陌言不会python1 小时前
谷粒微服务高级篇学习笔记整理---thymeleaf
笔记·学习·微服务
Y1nhl3 小时前
Pyspark学习一:概述
数据库·人工智能·深度学习·学习·spark·pyspark·大数据技术
能来帮帮蒟蒻吗3 小时前
Go语言学习(15)结构体标签与反射机制
开发语言·笔记·学习·golang
Aphelios3806 小时前
Java全栈面试宝典:线程机制与Spring IOC容器深度解析
java·开发语言·jvm·学习·rbac
日暮南城故里6 小时前
Java学习------源码解析之StringBuilder
java·开发语言·学习·源码
有个人神神叨叨8 小时前
OpenAI发布的《Addendum to GPT-4o System Card: Native image generation》文件的详尽笔记
人工智能·笔记
安全方案9 小时前
精心整理-2024最新网络安全-信息安全全套资料(学习路线、教程笔记、工具软件、面试文档).zip
笔记·学习·web安全
士别三日&&当刮目相看9 小时前
JAVA学习*Object类
java·开发语言·学习