Submission #496590

# Submission time Handle Problem Language Result Execution time Memory
496590 2021-12-21T15:25:37 Z MohamedAliSaidane Miners (IOI07_miners) C++14
76 / 100
1500 ms 976 KB
#pragma GCC target ("avx2")
#pragma GCC optimization ("O3")
#pragma GCC optimization ("unroll-loops")

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef pair<ld,ld> pld;
typedef vector<int> vi;
typedef vector<ll> vll;
typedef vector<pii> vpi;
typedef vector<pll> vpl;
typedef vector<pld> vpd;

#define pb push_back
#define popb pop_back
#define all(v) (v).begin(),(v).end()
#define ff first
#define ss second

const ll MOD = 1e9 + 7;
const ll INF = 1e18;
int nx[4] = {1,-1,0,0}, ny[4] = {0,0,1,-1};
ll gcd(ll a , ll b) {return b ? gcd(b , a % b) : a ;}
ll lcm(ll a, ll b){return (a / gcd(a, b)) * b;}
ld dist(ld x1, ld y1, ld x2, ld y2){return sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2));}

const int MAX_N = 1e5 + 4;
int dp[2][4][4][4][4];
int n;
vi A;
void solve()
{
    memset(dp,-1,sizeof(dp));
    cin >> n;
    for(int i = 0; i <n;  i ++)
    {
        char c; cin >> c;
        if(c== 'M')
            A.pb(1);
        else if(c=='F')
            A.pb(2);
        else
            A.pb(3);
    }
   for(int i = n-1; i >= 0; i --)
   {
       for(int x1 = 3; x1 >= 0; x1 --)
       {
           for(int x2 = 3; x2 >= 0; x2 --)
           {
               for(int y1 = 3; y1 >= 0; y1 --)
               {
                   for(int y2 =3; y2 >= 0; y2 --)
                   {
                       //cout << "here " << i << ' ' << x1 << ' ' << x2 << ' ' << y1 << ' ' << y2 << endl;
                        unordered_set<int> u;
                        unordered_set<int> v;
                        if(x1 != 0)
                            u.insert(x1);
                        if(x2 != 0)
                            u.insert(x2);
                        if(y1 != 0)
                            v.insert(y1);
                        if(y2 != 0)
                            v.insert(y2);
                        u.insert(A[i]);
                        v.insert(A[i]);
                        if(i == n-1)
                        {
                            dp[(i&1)][x1][x2][y1][y2] = max(u.size(),v.size());
                            continue;
                        }
                        int x = dp[1-(i&1)][x2][A[i]][y1][y2] + u.size();
                        int y = dp[1-(i&1)][x1][x2][y2][A[i]] + v.size();
                        dp[(i&1)][x1][x2][y1][y2] = max(x,y);
                   }
               }
           }
       }
   }
   cout << dp[0][0][0][0][0] ;
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    int tt  = 1;

    while(tt--)
        solve();
}

Compilation message

miners.cpp:2: warning: ignoring '#pragma GCC optimization' [-Wunknown-pragmas]
    2 | #pragma GCC optimization ("O3")
      | 
miners.cpp:3: warning: ignoring '#pragma GCC optimization' [-Wunknown-pragmas]
    3 | #pragma GCC optimization ("unroll-loops")
      |
# Verdict Execution time Memory Grader output
1 Correct 2 ms 204 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 320 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 4 ms 204 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 308 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 332 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 5 ms 204 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 135 ms 320 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 653 ms 356 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1241 ms 420 KB Output is correct
# Verdict Execution time Memory Grader output
1 Execution timed out 1585 ms 460 KB Time limit exceeded
# Verdict Execution time Memory Grader output
1 Execution timed out 1509 ms 952 KB Time limit exceeded
# Verdict Execution time Memory Grader output
1 Execution timed out 1590 ms 976 KB Time limit exceeded