Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdio>
- #include <algorithm>
- #include <cstring>
- #include <string>
- #include <cctype>
- #include <stack>
- #include <bitset>
- #include <queue>
- #include <list>
- #include <vector>
- #include <map>
- #include <set>
- #include <iterator>
- #include <sstream>
- #include <stdlib.h>
- #include <cmath>
- #define FOR(i,A) for(typeof (A).begin() i = (A).begin() ; i != (A).end() ; i++)
- #define debug( x ) cout << #x << " = " << x << endl
- #define clr(v,x) memset( v, x , sizeof v )
- #define all(x) (x).begin() , (x).end()
- #define rall(x) (x).rbegin() , (x).rend()
- #define TAM 110
- using namespace std;
- typedef pair<int,int> ii ;
- typedef long long ll ;
- typedef long double ld ;
- typedef pair<int,ii> pii ;
- int fox_progression(vector <int> seq)
- {
- int n = seq.size();
- // si solo hay un elemento, entonces son infinitas formas
- if (n==1) {
- return -1;
- }
- // r aritmetico
- int dif = seq[1] - seq[0];
- // r geometrico
- int q = seq[1] / seq[0];
- // verifico que sea o geometrica o aritmetica
- bool cangeo = true;
- bool canari = true;
- for (int i=1; i<n; i++) {
- canari &= ( seq[i]-seq[i-1] == dif );
- cangeo &= ( seq[i-1]*q == seq[i] );
- }
- // candidatos a posibles rptas
- int x = seq[n-1]*q;
- int y = seq[n-1]+dif;
- // si los 2 salen true, debemos revisar si son iguales
- // ya que puede haer el caso 1 1 1, donde solo hay una posible rpta
- //porque no importa que se use
- if ( cangeo && canari ) {
- return ( x!=y ) ? 2 : 1;
- } else if (cangeo || canari) {
- return 1;
- } else {
- return 0;
- }
- }
- int main() {
- vector<int> arr;
- int t,fox,aux,m;
- scanf("%d",&t);getchar();
- while(t--){
- scanf("%d",&m);
- for(int j=0;j<m;j++){
- scanf("%d",&aux);arr.push_back(aux);
- }
- fox=fox_progression(arr);
- printf("%d\n",fox);arr.clear();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement