(UPD: 2024-12-04 14:48 UTC) Judge is not working due to Cloudflare incident. (URL) We can do nothing about it, sorry. After the incident is resolved, we will grade all submissions.

Submission #442345

#TimeUsernameProblemLanguageResultExecution timeMemory
442345Bench0310Kangaroo (CEOI16_kangaroo)C++17
100 / 100
38 ms336 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; int main() { ios::sync_with_stdio(0); cin.tie(0); int n,x,y; cin >> n >> x >> y; vector<ll> dp(n+1,0); dp[0]=1; const ll mod=1000000007; auto add=[&](ll a,ll b)->ll{return (a+b)%mod;}; auto mul=[&](ll a,ll b)->ll{return (a*b)%mod;}; for(int i=1;i<=n;i++) { vector<ll> ndp(n+1,0); for(int j=0;j<=n;j++) { if(i!=x&&i!=y) { //merge groups if(j>0) ndp[j-1]=add(ndp[j-1],mul(j-1,dp[j])); //make new group if(j<n&&j+1-(i>x)-(i>y)>=0) ndp[j+1]=add(ndp[j+1],mul(j+1-(i>x)-(i>y),dp[j])); } else if(i==x) { //add to front of first group ndp[j]=add(ndp[j],dp[j]); //make new first group if(j<n) ndp[j+1]=add(ndp[j+1],dp[j]); } else if(i==y) { //add to end of last group ndp[j]=add(ndp[j],dp[j]); //make new last group if(j<n) ndp[j+1]=add(ndp[j+1],dp[j]); } } dp=ndp; } cout << dp[1] << "\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...