Submission #260070

#TimeUsernameProblemLanguageResultExecution timeMemory
260070arnold518Vim (BOI13_vim)C++14
55 / 100
1090 ms197880 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int, int> pii; typedef pair<ll, ll> pll; const int MAXN = 5000; int N; char A[MAXN+10]; ll dp[MAXN+10][MAXN+10]; vector<int> V[10]; vector<int>::iterator low[MAXN+10][10], upp[MAXN+10][10]; ll solve(int now, int pos) { ll &ret=dp[now][pos]; if(ret!=-1) return ret; ret=1e18; for(int i=0; i<10; i++) { if(i==4) continue; auto it=upp[now][i]; if(it==V[i].end()) continue; ret=min(ret, solve(*it, pos)+2); } if(now>pos) { ll p=now-pos+low[now][4]-low[pos][4]; auto jt=upp[now][4]; if(jt==V[4].end()) ret=min(ret, p); else { for(int i=0; i<10; i++) { if(i==4) continue; auto it=upp[pos+1][i]; if(it==V[i].end()) continue; ret=min(ret, solve(*it, *jt)+p+2); } } } //printf("%d %d : %d\n", now, pos, ret); return ret; } int main() { scanf("%*d", &N); scanf(" %s", A+1); N=strlen(A+1); for(int i=1; i<=N; i++) V[A[i]-'a'].push_back(i); for(int j=0; j<10; j++) for(int i=1; i<=N; i++) low[i][j]=lower_bound(V[j].begin(), V[j].end(), i); for(int j=0; j<10; j++) for(int i=1; i<=N; i++) upp[i][j]=upper_bound(V[j].begin(), V[j].end(), i); if(V[4].empty()) return !printf("0\n"); memset(dp, -1, sizeof(dp)); printf("%d\n", solve(1, V[4].front())); }

Compilation message (stderr)

vim.cpp: In function 'int main()':
vim.cpp:52:17: warning: too many arguments for format [-Wformat-extra-args]
  scanf("%*d", &N);
                 ^
vim.cpp:62:39: warning: format '%d' expects argument of type 'int', but argument 2 has type 'll {aka long long int}' [-Wformat=]
  printf("%d\n", solve(1, V[4].front()));
                 ~~~~~~~~~~~~~~~~~~~~~~^
vim.cpp:52:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%*d", &N);
  ~~~~~^~~~~~~~~~~
vim.cpp:53:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf(" %s", A+1);
  ~~~~~^~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...