Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <algorithm>
- #include <iostream>
- #include <sstream>
- #include <string>
- #include <vector>
- #include <queue>
- #include <set>
- #include <map>
- #include <cstdio>
- #include <cstdlib>
- #include <cctype>
- #include <cmath>
- #include <numeric>
- #include <iterator>
- #include <stack>
- #include <list>
- #define fori(i,start,end) for(int(i)=int(start);(i)<int(end);(i)++)
- #define all(a) (a).begin(), (a).end()
- #define rep(i, end) fori((i), 0, (end))
- using namespace std;
- #ifndef ONLINE_JUDGE
- void compare(int test_number, stringstream& output, stringstream& solution) {
- cout << "Test " << test_number << ": ";
- if (solution.str() != output.str()) {
- cout << "not ok. Expected:\n" << solution.str() << "\nRecieved:\n" << output.str() << "\n";
- } else {
- cout << "ok.\n";
- }
- }
- #endif
- string rearrange(string& s, vector<int>& perm) {
- string ret;
- rep(i, perm.size()) {
- ret.push_back(s[perm[i]]);
- }
- return ret;
- }
- int rearrange_convert(vector<int>& v, vector<int>& perm) {
- int ret = 0;
- rep(i, perm.size()) {
- ret = ret*10 + v[perm[i]];
- }
- return ret;
- }
- template<class T> T convert(const string& s) {T ret; istringstream iss(s); iss >> ret; return ret; }
- void f(istream& input, ostream& output) {
- int n, k;
- input >> n >> k;
- vector<vector<int> > num(n, vector<int>(k));
- rep(i,n) {
- string s;
- input >> s;
- rep(j, k) num[i][j] = s[j] - '0';
- }
- vector<int> perm;
- rep(i,k) perm.push_back(i);
- int min = 100000000;
- vector<int> d(n);
- do {
- rep(i, n) {
- d[i] = rearrange_convert(num[i], perm);
- }
- sort(all(d));
- min = std::min(min, d[n-1] - d[0]);
- } while (next_permutation(all(perm)));
- output << min;
- }
- void f1(istream& input, ostream& output) {
- vector<string> num;
- int n, k;
- input >> n >> k;
- rep(i,n) {
- string s;
- input >> s;
- num.push_back(s);
- }
- vector<int> perm;
- rep(i,k) perm.push_back(i);
- int min = 100000000;
- do {
- vector<int> d;
- rep(i, n) {
- const string& tmp = rearrange(num[i], perm);
- d.push_back(convert<int>(tmp));
- }
- sort(all(d));
- min = std::min(min, d[n-1] - d[0]);
- } while (next_permutation(all(perm)));
- output << min;
- }
- int main() {
- #ifdef ONLINE_JUDGE
- f(cin, cout);
- #else
- {
- stringstream input;
- input << "6 4\n5237\n2753\n7523\n5723\n5327\n2537";
- stringstream solution;
- solution << "2700";
- stringstream output;
- f(input, output);
- compare(0, output, solution);
- }
- {
- stringstream input;
- input << "3 3\n010\n909\n012";
- stringstream solution;
- solution << "3";
- stringstream output;
- f(input, output);
- compare(1, output, solution);
- }
- {
- stringstream input;
- input << "7 5\n50808\n36603\n37198\n44911\n29994\n42543\n50156";
- stringstream solution;
- solution << "20522";
- stringstream output;
- f(input, output);
- compare(2, output, solution);
- }
- {
- stringstream input;
- input << "8 8\n96805230\n73119021\n06552907\n86283347\n88650846\n19155689\n37032451\n19310120";
- stringstream solution;
- solution << "53604668";
- stringstream output;
- f(input, output);
- compare(3, output, solution);
- }
- #endif
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement