Advertisement
juanjo12x

SRM_501_Fox_Progression

Aug 21st, 2014
265
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.92 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <algorithm>
  4. #include <cstring>
  5. #include <string>
  6. #include <cctype>
  7. #include <stack>
  8. #include <bitset>
  9. #include <queue>
  10. #include <list>
  11. #include <vector>
  12. #include <map>
  13. #include <set>
  14. #include <iterator>
  15. #include <sstream>
  16. #include <stdlib.h>
  17. #include <cmath>
  18. #define FOR(i,A) for(typeof (A).begin() i = (A).begin() ; i != (A).end() ; i++)
  19. #define debug( x ) cout << #x << " = " << x << endl
  20. #define clr(v,x) memset( v, x , sizeof v )
  21. #define all(x) (x).begin() , (x).end()
  22. #define rall(x) (x).rbegin() , (x).rend()
  23. #define TAM 110
  24.  
  25. using namespace std;
  26.  
  27. typedef pair<int,int> ii ;
  28. typedef long long ll ;
  29. typedef long double ld ;
  30. typedef pair<int,ii> pii ;
  31.  
  32. int fox_progression(vector <int> seq)
  33. {
  34.     int n = seq.size();
  35.     // si solo hay un elemento, entonces son infinitas formas
  36.     if (n==1) {
  37.         return -1;
  38.     }
  39.     // r aritmetico
  40.     int dif = seq[1] - seq[0];
  41.     // r geometrico
  42.     int q = seq[1] / seq[0];
  43.    
  44.     // verifico que sea o geometrica o aritmetica
  45.     bool cangeo = true;
  46.     bool canari = true;
  47.     for (int i=1; i<n; i++) {
  48.         canari &= ( seq[i]-seq[i-1] == dif );
  49.         cangeo &= ( seq[i-1]*q == seq[i] );
  50.     }
  51.     // candidatos a posibles rptas
  52.     int x = seq[n-1]*q;
  53.     int y = seq[n-1]+dif;
  54.    
  55.     // si los 2 salen true, debemos revisar si son iguales
  56.     // ya que puede haer el caso  1 1 1, donde solo hay una posible rpta
  57.     //porque no importa que se use
  58.     if ( cangeo && canari ) {
  59.         return ( x!=y ) ? 2 : 1;
  60.     } else if (cangeo || canari) {
  61.         return 1;
  62.     } else {
  63.         return 0;
  64.     }
  65.    
  66. }
  67. int main() {
  68.     vector<int> arr;
  69.     int t,fox,aux,m;
  70.     scanf("%d",&t);getchar();
  71.     while(t--){
  72.         scanf("%d",&m);
  73.         for(int j=0;j<m;j++){
  74.           scanf("%d",&aux);arr.push_back(aux);
  75.         }
  76.       fox=fox_progression(arr);
  77.       printf("%d\n",fox);arr.clear();
  78.     }
  79.     return 0;
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement