SRM583 Div2 easy SwappingDigits
問題
50桁くらいまでの数字が与えられます。
どっかの2つの桁の数字を一度だけ入れ替えることができます(入れ替えなくてもいいです)。ただし先頭0はダメです。
できる最小の数字はなんでしょうか?
解法
高々50桁なので、桁のペア全部に対して入れ替えを試して比較しまくって最小を求めればOK。
プログラム
#include <sstream> #include <string> #include <vector> #include <map> #include <algorithm> #include <iostream> #include <utility> #include <set> #include <cctype> #include <queue> #include <stack> #include <cstdio> #include <cstdlib> #include <cmath> using namespace std; #define li long long int #define rep(i,to) for(int i=0;i<((int)(to));i++) #define repp(i,start,to) for(int i=(int)(start);i<((int)(to));i++) #define pb push_back #define sz(v) ((li)(v).size()) #define allof(v) (v).begin(),(v).end() #define p2(a,b) cout<<a<<"\t"<<b<<endl class SwappingDigits { public: string minNumber(string num) { string tmp; string res=num; rep(i,sz(num)-1){ repp(j,i+1,sz(num)){ tmp=num; tmp[j]=num[i]; tmp[i]=num[j]; if(tmp[0]!='0' && tmp<res)res=tmp; } } return res; } };