제출 #247439

#제출 시각아이디문제언어결과실행 시간메모리
247439ritikpatel05Miners (IOI07_miners)C++17
100 / 100
1232 ms208888 KiB
/* Author: Ritik Patel */ //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& STL DEBUGGER &&&&&&&&&&&&&&&&&&&&&&&&&&& // #define _GLIBCXX_DEBUG // Iterator safety; out-of-bounds access for Containers, etc. // #pragma GCC optimize "trapv" // abort() on (signed) integer overflow. //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& LIBRARIES &&&&&&&&&&&&&&&&&&&&&&&&&&& #include <bits/stdc++.h> using namespace std; /*#include <ext/pb_ds/assoc_container.hpp> // Common file #include <ext/pb_ds/tree_policy.hpp> // Including tree_order_statistics_node_update template<typename T, typename V = __gnu_pbds::null_type> using ordered_set = __gnu_pbds::tree<T, V, less<T>, __gnu_pbds::rb_tree_tag, __gnu_pbds::tree_order_statistics_node_update>; */ //find_by_order()->returns an iterator to the k-th largest element(0-based indexing) //order_of_key()->Number of items that are strictly smaller than our item //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& DEFINES &&&&&&&&&&&&&&&&&&&&&&&&&&& #define int long long int // #define ll long long int #define all(i) i.begin(), i.end() #define sz(a) (int)a.size() // #define ld long double // const ld PI = 3.141592; const int dx4[4] = {0, 1, 0, -1}; const int dy4[4] = {-1, 0, 1, 0}; const int dx8[8] = {-1, -1, -1, 0, 1, 1, 1, 0}; const int dy8[8] = {-1, 0, 1, 1, 1, 0, -1, -1}; //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& DEBUG &&&&&&&&&&&&&&&&&&&&&&&&&&& #define XOX vector<string> vec_splitter(string s) { for(char& c: s) c = c == ','? ' ': c; stringstream ss; ss << s; vector<string> res; for(string z; ss >> z; res.push_back(z)); return res; } void debug_out(vector<string> __attribute__ ((unused)) args, __attribute__ ((unused)) int idx) { cerr << endl; } template <typename Head, typename... Tail> void debug_out(vector<string> args, int idx, Head H, Tail... T) { if(idx > 0) cerr << ", "; stringstream ss; ss << H; cerr << args[idx] << " = " << ss.str(); debug_out(args, idx + 1, T...); } #ifdef XOX #define debug(...) debug_out(vec_splitter(#__VA_ARGS__), 0, __VA_ARGS__) #else #define debug(...) 42 #endif //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& CODE &&&&&&&&&&&&&&&&&&&&&&&&&&& int N; string S; const int MAXN = 1e5 + 5; int memo[MAXN][4][4][4][4]; int get(char c){ if(c == 'M') return 1; else if(c == 'F') return 2; return 3; } int score(int a, int b, int c){ set<int> s; if(a > 0) s.insert(a); if(b > 0) s.insert(b); if(c > 0) s.insert(c); return sz(s); } int dp(int id, int prev22, int prev12, int prev21, int prev11){ if(id == N){ return 0; } auto &res = memo[id][prev22][prev12][prev21][prev11]; if(res != -1){ return res; } res = 0; res = max(res, dp(id + 1, get(S[id]), prev22, prev21, prev11 ) + score(get(S[id]), prev22, prev12) ); res = max(res, dp(id + 1, prev22, prev12, get(S[id]), prev21 ) + score(get(S[id]), prev21, prev11) ); return res; } void solve(){ memset(memo, -1, sizeof(memo)); cin >> N >> S; cout << dp(0, 0, 0, 0, 0) << '\n'; } int32_t main(){ ios_base::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr); int T = 1; // cin >> T; for(int i = 1; i <= T; ++i){ // brute(); solve(); } return 0; } /* Sample inp */
#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...