제출 #70381

#제출 시각아이디문제언어결과실행 시간메모리
70381dooweyMiners (IOI07_miners)C++14
76 / 100
1580 ms101252 KiB
#pragma GCC optimize("O3")
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

typedef long double db;
typedef pair<int,int> pii;

#define fi first
#define se second
#define mp make_pair
#define fastIO std::ios::sync_with_stdio(false);cin.tie(NULL);
#define TEST freopen("in.txt","r",stdin);
#define ones(a) __builtin_popcount(a);
#define pq priority_queue

const int N = (int)1e5 + 9;

int dp[N][4][4][4][4];

int calc(int a, int b, int c){
  vector<int> t;
  if(a != 0)t.push_back(a);
  if(b != 0)t.push_back(b);
  if(c != 0)t.push_back(c);
  sort(t.begin(), t.end());
  int eq = 0;
  for(int i = 1;i < t.size(); i ++ ){
    if(t[i] == t[i - 1])
      eq ++;
  }
  return (int)t.size() - eq;
}

void upd(int &a, int b){
  a = max(a, b);
}

int main(){
  fastIO;
  memset(dp, -10000000, sizeof dp);
  dp[0][0][0][0][0] = 0;
  int n;
  cin >> n;
  char k;
  int y;
  int ans = 0;
  for(int i = 1; i <= n;i ++ ){
    cin >> k;
    if(k == 'M')
      y = 1;
    else if(k == 'F')
      y = 2;
    else
      y = 3;
    // send this to mine 1:
    for(int t1 = 0; t1 < 4; t1 ++ ){
      for(int t2 = 0; t2 < 4; t2 ++ ){
        for(int s1 = 0; s1 < 4; s1 ++ ){
          for(int s2 = 0; s2 < 4; s2 ++ ){
            upd(dp[i][y][t1][s1][s2], dp[i - 1][t1][t2][s1][s2] + calc(y, t1, t2));
            upd(ans, dp[i][y][t1][s1][s2]);
          }
        }
      }
    }
    // send this to mine 2:
    for(int t1 = 0; t1 < 4; t1 ++ ){
      for(int t2 = 0; t2 < 4; t2 ++ ){
        for(int s1 = 0; s1 < 4; s1 ++ ){
          for(int s2 = 0; s2 < 4; s2 ++ ){
            upd(dp[i][t1][t2][y][s1], dp[i - 1][t1][t2][s1][s2] + calc(y, s1, s2));
            upd(ans, dp[i][t1][t2][y][s1]);
          }
        }
      }
    }
  }
  cout << ans << " "; 
  return 0;
}

컴파일 시 표준 에러 (stderr) 메시지

miners.cpp: In function 'int calc(int, int, int)':
miners.cpp:30:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i = 1;i < t.size(); i ++ ){
                 ~~^~~~~~~~~~
#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...