|
|
back to boardTLE on test #6 (C++) how to improve algorithm? Can't get past test #6 (Time limit exceeded) and I have no idea how could I improve/change the algorithm, looking for suggestions ;P. Thanks. Here's the code (with comments ^^): #include <cstdlib> #include <iostream> #include <string> using namespace std; int powering(int n){ int r = 1; for (int i = 0; i<n; i++){ r = r*10;} return r; } int main(int argc, char *argv[]) { std::string inputNumber; std::cin >> inputNumber; int length = inputNumber.length(); char digits[100001]; int num[100001];
for (int i=0; i<length; i++){ //reading input digits[i] = inputNumber[i]; num[i] = digits[i] - '0';}
for (int i=0; i<length; i++) // starting cycle for all n { int q = powering(i); int n = q; // n = 10^i bool unique; for(int m = 0; m<(q*10); m++){ // running through every number in 10^i to 10^(i+1)-1
unique = true; for(int j = 0; j<(length-i); j++) //with a given number, checking if it's in the string; { int temp = n; for(int x = j+i; x>=j; x--){ // checking if the number is unique in given position // x = current digit, i = number of digits (zero based) temp = temp - num[x]; if(temp == 0){unique = false; break;} if(temp % 10 != 0){break;}else{temp = (int)(temp/10);} } if(unique == false){break;} // if given number is not unique, breaks the cycle } if(unique == true){std::cout << n << endl; return 1; } // checks if the number checked was unique (add pause here if you want to test) if(n<((q*10)-1)){n++;}else{break;} // checks if 10^(i+1)-1 is reached, if not, then n++; } } return EXIT_SUCCESS; } Edited by author 25.09.2011 22:01 Edited by author 25.09.2011 22:01 Edited by author 25.09.2011 22:01 |
|
|