CF 464C Substitutes in Number 题解
前置知识:。
同余定理使用后不能再修改数字。那么为了能用这个公式,我
们倒序处理每个数字。
定义 为 的位数 次幂对 取模的值(数 经转化后的位数), 表示数 转化后的数对 取模的值,那么每个数(包括答案)就可以通过拼凑的办法搞出来。
/* * Title: Substitutes in Number * Source: 洛谷-CF * URL: https://www.luogu.com.cn/problem/CF464C * Author: Steven_lzx * Command: -std=c++23 -Wall -fno-ms-extensions * Date: 2022.10.26 */ #include <bits/stdc++.h> using namespace std; typedef long long ll; const int MOD=1e9+7,MAXN=100010; int a[MAXN],n,len,x; ll d[10],b[10],num,wei,ans; char ss[MAXN]; string s,str[MAXN]; int main() { ios::sync_with_stdio(false); cin.tie(0); cin>>s>>n; //cout<<s<<endl<<n<<endl; //cout<<"???\n"; cin.get(); for(int i=1;i<=n;i++) { cin>>a[i]>>str[i]; str[i]=str[i].substr(2); } for(int i=0;i<10;i++) { d[i]=10; b[i]=i; } for(int i=n;i;i--) { len=str[i].length(); if(!len) { b[a[i]]=0; d[a[i]]=1; continue; } num=0; wei=1; for(int j=0;j<len;j++) { x=str[i][j]-'0'; num=(num*d[x]+b[x])%MOD; wei=(wei*d[x])%MOD; } b[a[i]]=num; d[a[i]]=wei; } ans=0; for(int i=0;i<(int)s.length();i++) { x=s[i]-'0'; ans=(ans*d[x]+b[x])%MOD; } cout<<ans<<endl; return 0; }
本文作者:Day_Dreamer_D
本文链接:https://www.cnblogs.com/2020gyk080/p/16829726.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步