題目描述:網絡流裸題
問題描述
(這道題的數據和SPJ已完工,盡情來虐吧!)
Yaroslav喜歡算法。我們將描述一個他最喜歡的算法。
1.這個算法接受一個字符串作為輸入。我們設這個輸入字符串為a。
2.這個算法由一些命令組成。i號命令的形式為"s[i]>>w[i]"或"s[i]<>w[i]",其中s[i]和w[i]是長度不超過7的字符串(可以為空),由數字或字符"?"組成。
3.這個算法每次尋找一個編號最小的命令i,使得s[i]是a的子串。如果沒有找到這樣的命令,那么整個算法終止。
4.設找到的命令編號為k。在字符串a中,s[k]第一次出現的位置會被w[k]替換。如果這個命令形如"s[k]>>w[k]",那么這個算法繼續執行(譯注:回到第3步)。否則,算法終止。
5.算法的輸出就是算法終止時字符串a的值。
Yaroslav有一個n個正整數的集合,他需要一個這樣的算法,且能夠使每一個數加1。更正式地,如果我們把每個數看成一個十進制表示的字符串,那么對於每個字符串獨立地運行這個算法,這個算法需要輸出一個輸入串對應的數+1的字符串。
幫幫他吧!
輸入格式
第一行包含一個整數n(集合中數的個數),接下來n行,每行包含一個正整數。
輸出格式
輸出一個符合題意的算法(能夠分別將每個數增加1)。第i行輸出這個算法的第i個命令,不包含空格。
你的算法將會對於每個輸入運行一遍。你的輸出會被認為是正確的,當且僅當:
·每行都是一個合法的命令(格式見題目描述)
·命令的條數不能超過50。
·算法需要對每個給出的數+1。
·為了得到結果,算法必須對於每個輸入都執行不超過200步。
樣例輸入
2
10
79
樣例輸出
10<>11
79<>80
數據規模和約定
1≤每個數≤10^25。共有20個測試點,對於第i個測試點,n=5i。
思路
一開始看這道題的時候,懵逼了,他這說的什么???我怎么看不懂題意????
然后看了一下案例,再仔細琢磨了一下,發現他只要你把他給的數+1就行了,就行了,就行了
但是,那個數超過了longlong,所以得用string存。
其實說白了就是一個超級超級簡單的大數運算(只是+1)
代碼
// 試題 算法訓練 Yaroslav and Algorithm
// 大數運算 簡單的+1
#include <iostream>
#include <cstdio>
using namespace std;
typedef long long ll;
string a, b;
int main()
{
int n;
scanf("%d", &n);
while (n--)
{
cin >> a;
b = a;
int len = a.length() - 1;
int c = (int)a[len] - '0' + 1;
while (c > 9 && len > 0)
{
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;
}
