C++
1#include <bits/stdc++.h> 2using namespace std; 3#define ll long long 4#define ld long double 5#define rep(i,a,n) for (ll i = a;i<(n);++i) 6#define all(v) v.begin(),v.end() 7#define bit(n) (1LL<<(n)) 8#define maxe(n) *max_element(all(n)) 9#define mine(n) *min_element(all(n)) 10#define INF 1000000000000 //10^12 11#define MOD 10000007 //10^9+7 12#define MAXR 100000 //10^5 13template<class T>bool chmax(T &a, const T &b) { if (a<b) { a=b; return 1; } return 0; } 14template<class T>bool chmin(T &a, const T &b) { if (b<a) { a=b; return 1; } return 0; } 15class range {private: struct I{int x;int operator*(){return x;}bool operator!=(I& lhs){return x<lhs.x;}void operator++(){++x;}};I i,n; 16public:range(int n):i({0}),n({n}){}range(int i,int n):i({i}),n({n}){}I& begin(){return i;}I& end(){return n;}}; 17/*------------------------------------------------------------------------------------------------------------------------------------------------*/ 18ll n;vector<pair<ll,ll>>a(n);//宣言 19bool check(ll i,ll ans){//再帰関数として実装 20 ans+=1;//回数 21 if(a[i].first==2)return true;//2だったらtrueを返す 22 if(a[i].second==1)return false;//secondのほうで一回押したかどうかを判定し、押したことがあった場合falseを返す 23 else{ 24 a[i].second=1;//一回押したことを示す 25 check(a[i].first-1,ans);//再帰 26 } 27} 28int main(){ 29 ll cnt=0;//回数はかる 30 cin>>n;//入力 31 rep(i,0,n){ 32 cin>>a[i].first;a[i].second=0;//全て0にセット 33 } 34 if(check(0,cnt))cout<<cnt;//trueが返された場合、回数を出力 35 else cout<<-1;//falseの場合-1を出力 36 return 0; 37}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。