Advertisement
Guest User

Codeforces Round #92 (Div. 2 Only), problem B

a guest
Nov 4th, 2011
384
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.62 KB | None | 0 0
  1. #include <algorithm>
  2. #include <iostream>
  3. #include <sstream>
  4. #include <string>
  5. #include <vector>
  6. #include <queue>
  7. #include <set>
  8. #include <map>
  9. #include <cstdio>
  10. #include <cstdlib>
  11. #include <cctype>
  12. #include <cmath>
  13. #include <numeric>
  14. #include <iterator>
  15. #include <stack>
  16. #include <list>
  17.  
  18.  
  19. #define fori(i,start,end) for(int(i)=int(start);(i)<int(end);(i)++)
  20. #define all(a) (a).begin(), (a).end()
  21. #define rep(i, end) fori((i), 0, (end))
  22.  
  23. using namespace std;
  24.  
  25. #ifndef ONLINE_JUDGE
  26. void compare(int test_number, stringstream& output, stringstream& solution) {
  27.         cout << "Test " << test_number << ": ";
  28.         if (solution.str() != output.str()) {
  29.             cout << "not ok. Expected:\n" << solution.str() << "\nRecieved:\n" << output.str() << "\n";
  30.         } else {
  31.             cout << "ok.\n";
  32.         }
  33. }
  34. #endif
  35.  
  36.  
  37.  
  38. string rearrange(string& s, vector<int>& perm) {
  39.     string ret;
  40.     rep(i, perm.size()) {
  41.         ret.push_back(s[perm[i]]);
  42.     }
  43.     return ret;
  44. }
  45.  
  46. int rearrange_convert(vector<int>& v, vector<int>& perm) {
  47.     int ret = 0;
  48.     rep(i, perm.size()) {
  49.         ret = ret*10 + v[perm[i]];
  50.     }
  51.     return ret;
  52. }
  53.  
  54. template<class T> T convert(const string& s) {T ret; istringstream iss(s); iss >> ret; return ret; }
  55.  
  56. void f(istream& input, ostream& output) {
  57.     int n, k;
  58.     input >> n >> k;
  59.     vector<vector<int> > num(n, vector<int>(k));
  60.     rep(i,n) {
  61.         string s;
  62.         input >> s;
  63.         rep(j, k) num[i][j] = s[j] - '0';
  64.     }
  65.    
  66.     vector<int> perm;
  67.     rep(i,k) perm.push_back(i);
  68.  
  69.     int min = 100000000;
  70.     vector<int> d(n);
  71.     do {
  72.         rep(i, n) {
  73.             d[i] = rearrange_convert(num[i], perm);
  74.         }
  75.         sort(all(d));
  76.         min = std::min(min, d[n-1] - d[0]);
  77.     } while (next_permutation(all(perm)));
  78.  
  79.     output << min;
  80. }
  81.  
  82.  
  83. void f1(istream& input, ostream& output) {
  84.     vector<string> num;
  85.     int n, k;
  86.     input >> n >> k;
  87.     rep(i,n) {
  88.         string s;
  89.         input >> s;
  90.         num.push_back(s);
  91.     }
  92.    
  93.     vector<int> perm;
  94.     rep(i,k) perm.push_back(i);
  95.  
  96.     int min = 100000000;
  97.     do {
  98.         vector<int> d;
  99.         rep(i, n) {
  100.             const string& tmp = rearrange(num[i], perm);
  101.             d.push_back(convert<int>(tmp));
  102.         }
  103.         sort(all(d));
  104.         min = std::min(min, d[n-1] - d[0]);
  105.     } while (next_permutation(all(perm)));
  106.  
  107.     output << min;
  108. }
  109.  
  110. int main() {
  111. #ifdef ONLINE_JUDGE
  112.     f(cin, cout);
  113. #else
  114.     {
  115.         stringstream input;
  116.         input << "6 4\n5237\n2753\n7523\n5723\n5327\n2537";
  117.         stringstream solution;
  118.         solution << "2700";
  119.        
  120.         stringstream output;
  121.         f(input, output);
  122.  
  123.         compare(0, output, solution);
  124.     }
  125.     {
  126.         stringstream input;
  127.         input << "3 3\n010\n909\n012";
  128.         stringstream solution;
  129.         solution << "3";
  130.  
  131.         stringstream output;
  132.         f(input, output);
  133.  
  134.         compare(1, output, solution);
  135.     }
  136.     {
  137.         stringstream input;
  138.         input << "7 5\n50808\n36603\n37198\n44911\n29994\n42543\n50156";
  139.         stringstream solution;
  140.         solution << "20522";
  141.        
  142.         stringstream output;
  143.         f(input, output);
  144.        
  145.         compare(2, output, solution);
  146.     }
  147.     {
  148.         stringstream input;
  149.         input << "8 8\n96805230\n73119021\n06552907\n86283347\n88650846\n19155689\n37032451\n19310120";
  150.         stringstream solution;
  151.         solution << "53604668";
  152.        
  153.         stringstream output;
  154.         f(input, output);
  155.        
  156.         compare(3, output, solution);
  157.     }
  158.  
  159.    
  160.  
  161. #endif
  162.     return 0;
  163. }
  164.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement