問題描述
(這道題的數(shù)據(jù)和SPJ已完工,盡情來虐吧M课凇)
Yaroslav喜歡算法蛉迹。我們將描述一個他最喜歡的算法傅寡。
1.這個算法接受一個字符串作為輸入。我們設(shè)這個輸入字符串為a北救。
2.這個算法由一些命令組成荐操。i號命令的形式為"s[i]>>w[i]"或"s[i]<>w[i]",其中s[i]和w[i]是長度不超過7的字符串(可以為空)扭倾,由數(shù)字或字符"?"組成淀零。
3.這個算法每次尋找一個編號最小的命令i,使得s[i]是a的子串膛壹。如果沒有找到這樣的命令,那么整個算法終止唉堪。
4.設(shè)找到的命令編號為k模聋。在字符串a(chǎn)中,s[k]第一次出現(xiàn)的位置會被w[k]替換唠亚。如果這個命令形如"s[k]>>w[k]"链方,那么這個算法繼續(xù)執(zhí)行(譯注:回到第3步)。否則灶搜,算法終止祟蚀。
5.算法的輸出就是算法終止時字符串a(chǎn)的值工窍。
Yaroslav有一個n個正整數(shù)的集合,他需要一個這樣的算法前酿,且能夠使每一個數(shù)加1患雏。更正式地,如果我們把每個數(shù)看成一個十進(jìn)制表示的字符串罢维,那么對于每個字符串獨立地運行這個算法淹仑,這個算法需要輸出一個輸入串對應(yīng)的數(shù)+1的字符串。
幫幫他吧肺孵!
輸入格式
第一行包含一個整數(shù)n(集合中數(shù)的個數(shù))匀借,接下來n行,每行包含一個正整數(shù)平窘。
輸出格式
輸出一個符合題意的算法(能夠分別將每個數(shù)增加1)吓肋。第i行輸出這個算法的第i個命令,不包含空格瑰艘。
你的算法將會對于每個輸入運行一遍蓬坡。你的輸出會被認(rèn)為是正確的,當(dāng)且僅當(dāng):
·每行都是一個合法的命令(格式見題目描述)
·命令的條數(shù)不能超過50磅叛。
·算法需要對每個給出的數(shù)+1屑咳。
·為了得到結(jié)果,算法必須對于每個輸入都執(zhí)行不超過200步弊琴。
樣例輸入
2
10
79
樣例輸出
10<>11
79<>80
數(shù)據(jù)規(guī)模和約定
1≤每個數(shù)≤10^25兆龙。共有20個測試點,對于第i個測試點敲董,n=5i紫皇。
思路
這道題雖然看起來很難,剛開始連題目都沒看懂腋寨,但出題人想考的是大數(shù)的運算聪铺,只要你把他給的數(shù)+1就可以了
#include <iostream>
#include <cstdio>
using namespace std;
typedef long long ll;
string a, b;
int main()
{
int n;
cin>>n;
while(n--){
cin>>a;
b=a;
int len=a.length()-1;
int c=int(a[len])-'0'+1;
while(len>0 && c>9){
a[len]=c%10+'0';
len--;
c=c/10+int(a[len])-'0';
}
a[len]=c%10+'0';
if(c>9)
a="1"+a;
cout<<b<<"<>"<<a<<endl;
}
return 0;
}