Submission #813147

#TimeUsernameProblemLanguageResultExecution timeMemory
813147VladdenFibonacci representations (CEOI18_fib)C++14
15 / 100
2 ms300 KiB
#include <iostream> #include <algorithm> #include <set> using namespace std; const int N = 107; typedef long long ll; const ll MOD = 1e9+7; int A[N]; ll dp[N][2]; // 0 - prev was not split, 1 - prev was split ll X(int n){ if (n<0){ return 0; } return (n+1)/2; } ll solve(int &n){ multiset<int> S; for(int i = 1;i<=n;i+=1){ S.insert(A[i]); } int ptr = 0; while(!S.empty()){ int v = *S.begin(); S.erase(S.begin()); if (v==1 && S.count(v)!=0){ S.erase(S.lower_bound(1)); S.insert(2); } else if (S.count(v+1)!=0){ S.erase(S.lower_bound(v+1)); S.insert(v+2); } else{ A[++ptr] = v; } } n = ptr; dp[0][0] = 1; for(int i = 1;i<=n;i+=1){ dp[i][0] = (A[i-1]!=A[i]?dp[i-1][0]:0)+dp[i-1][1]; dp[i][1] = dp[i-1][0]*X(A[i]-2-A[i-1])+dp[i-1][1]*X(A[i]-2-(A[i-1]-1)); dp[i][0] %= MOD; dp[i][1] %= MOD; } return (dp[n][0]+dp[n][1])%MOD; } int main(){ int n; cin>>n; int sz = 0; for(int i = 1;i<=n;i+=1){ cin>>A[++sz]; cout<<solve(sz)<<'\n'; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...