Submission #927837

#TimeUsernameProblemLanguageResultExecution timeMemory
927837panLinear Garden (IOI08_linear_garden)C++17
90 / 100
62 ms65536 KiB
#include <bits/stdc++.h> //#include <ext/pb_ds/assoc_container.hpp> //#include <ext/pb_ds/tree_policy.hpp> //#include "bits_stdc++.h" #define f first #define s second #define pb push_back #define mp make_pair #define lb lower_bound #define ub upper_bound #define input(x) scanf("%lld", &x); #define input2(x, y) scanf("%lld%lld", &x, &y); #define input3(x, y, z) scanf("%lld%lld%lld", &x, &y, &z); #define input4(x, y, z, a) scanf("%lld%lld%lld%lld", &x, &y, &z, &a); #define print(x, y) printf("%lld%c", x, y); #define show(x) cerr << #x << " is " << x << endl; #define show2(x,y) cerr << #x << " is " << x << " " << #y << " is " << y << endl; #define show3(x,y,z) cerr << #x << " is " << x << " " << #y << " is " << y << " " << #z << " is " << z << endl; #define discretize(x) sort(x.begin(), x.end()); x.erase(unique(x.begin(), x.end()), x.end()); using namespace std; //using namespace __gnu_pbds; #define ordered_set tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> #define ordered_multiset tree<int, null_type, less_equal<int>, rb_tree_tag, tree_order_statistics_node_update> typedef long long ll; typedef long double ld; typedef pair<ld, ll> pd; typedef pair<string, ll> psl; typedef pair<ll, ll> pi; typedef pair<ll, pi> pii; // L < P ll n, m; string x; ll dp[1000005][3][3]; ll dfs(ll from, ll lo, ll hi) { if (from==n) return 1; if (dp[from][lo][hi]!=-1) return dp[from][lo][hi]; ll ret =0; if (hi+1<3) // choose P(+1) { ll newlo = max(0LL, lo-1); ll newhi = hi+1; ret = (ret+dfs(from+1, newlo, newhi))%m; } if (lo+1<3) // choose L (-1) { ll newlo = lo+1; ll newhi = max(0LL, hi-1); ret=(ret+dfs(from+1, newlo, newhi))%m; } dp[from][lo][hi] = ret; return ret; } int main() { ll ans = 1; input2(n,m); cin >> x; for (ll i=0;i<n;++i) for (ll j=0;j<3; ++j) for (ll k=0;k<3;++k) dp[i][j][k] = -1; ll newlo = 0, newhi = 0; for (ll i=0; i<n; ++i) { if (x[i]=='L') { newlo+=1; newhi = max(0LL, newhi-1); } else { if(newlo+1<3) ans= (ans+dfs(i+1, newlo+1, max(0LL, newhi-1)))%m; newlo = max(0LL, newlo-1); newhi+=1; } } print(ans, '\n'); return 0; }

Compilation message (stderr)

linear_garden.cpp: In function 'int main()':
linear_garden.cpp:12:27: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   12 | #define input2(x, y) scanf("%lld%lld", &x, &y);
      |                      ~~~~~^~~~~~~~~~~~~~~~~~~~
linear_garden.cpp:57:2: note: in expansion of macro 'input2'
   57 |  input2(n,m);
      |  ^~~~~~
#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...
#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...
#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...
#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...