CSU-暑假集训题 Long Number
题目链接:http://codeforces.com/problemset/problem/1157/B
思路:
大致题意就是一个长串数字中连续的一段的i可以用f(i)替换,得到的最大值是多少。
这个就是从前往后遍历,f(i)大于i就开始替换,遇到小于i的就停止。要注意开始替换的位置
AC代码
#include<iostream> #include<cstring> using namespace std; int b[10]; int getNum(int n); int main() { int n,num; cin>>n; string s; cin>>s; for(int i=1;i<=9;i++)cin>>b[i]; int i; int flag=0; //flag=1表示开始选择一段数字变成相应的f(i) for(i=0;i<n;i++) { int a=s[i]-'0'; if(b[a]==a)cout<<a; else if(b[a]>a){ flag=1; cout<<b[a]; } else if(flag&&b[a]<a)break; else cout<<a; } for(;i<n;i++)cout<<s[i]-'0'; cout<<endl; return 0; }

浙公网安备 33010602011771号