# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
127937 |
2019-07-10T08:45:53 Z |
구재현(#3116) |
JOI15_aaqqz (JOI15_aaqqz) |
C++14 |
|
7 ms |
376 KB |
#include <bits/stdc++.h>
using namespace std;
using pi = pair<int, int>;
using lint = long long;
const int MAXN = 3005;
int n, c, a[MAXN];
struct ds{
int cnt[MAXN], zeroes;
void init(){
memset(cnt, 0, sizeof(cnt));
zeroes = c + 1;
}
void add(int x, int v){
if(cnt[x] == 0) zeroes--;
cnt[x] += v;
if(cnt[x] == 0) zeroes++;
}
int query(){ return zeroes; }
}ds;
int solve(vector<int> F, vector<int> G, int ignore){
int ret = 0;
for(int i=0; i<G.size(); i++){
vector<int> w(G.begin(), G.begin() + i + 1);
sort(w.rbegin(), w.rend());
int tmp = 0;
int cnt = 0;
while(w.size() && w.back() == ignore) w.pop_back(), tmp++;
reverse(w.begin(), w.end());
for(int j=i+1; j<G.size(); j++) w.push_back(G[j]);
for(int j=0; j<F.size() && j<w.size(); j++){
if(F[j] != w[j]) break;
cnt++;
}
if(cnt + tmp >= i + 1) ret = max(ret, cnt * 2 + tmp);
}
return ret;
}
int solve(){
int ret = 0;
for(int i=0; i<n; i++){
int p = 0;
while(i - p >= 0 && i + p < n && a[i - p] == a[i + p]) p++;
vector<int> L, R;
for(int j=i-p; j>=0; j--) L.push_back(a[j]);
for(int j=i+p; j<n; j++) R.push_back(a[j]);
ret = max(ret, 2 * p - 1 + solve(L, R, -1));
}
for(int i=1; i<n; i++){
int p = 0;
while(i - p - 1 >= 0 && i + p < n && a[i - p - 1] == a[i + p]) p++;
vector<int> L, R;
for(int j=i-p-1; j>=0; j--) L.push_back(a[j]);
for(int j=i+p; j<n; j++) R.push_back(a[j]);
ret = max(ret, 2 * p + solve(L, R, -1));
}
for(int i=0; i<n-1; i++){
int nxt = -1;
for(int j=i+1; j<n; j++){
if(a[i] > a[j]){
nxt = j;
break;
}
}
if(nxt != -1){
vector<int> L, R;
for(int j=i; j>=0; j--) L.push_back(a[j]);
for(int j=i+1; j<n; j++){
R.push_back(a[j]);
}
ret = max(ret, solve(L, R, a[nxt]));
}
}
return ret;
}
int main(){
int cnt[MAXN] = {};
cin >> n >> c;
for(int i=0; i<n; i++){
cin >> a[i];
cnt[a[i]]++;
}
int ret = *max_element(cnt, cnt + MAXN);
ret = max(ret, solve());
for(int i=0; i<n; i++) a[i] = c + 1 - a[i];
reverse(a, a + n);
ret = max(ret, solve());
cout << ret << endl;
}
Compilation message
aaqqz.cpp: In function 'int solve(std::vector<int>, std::vector<int>, int)':
aaqqz.cpp:25:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i=0; i<G.size(); i++){
~^~~~~~~~~
aaqqz.cpp:32:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int j=i+1; j<G.size(); j++) w.push_back(G[j]);
~^~~~~~~~~
aaqqz.cpp:33:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int j=0; j<F.size() && j<w.size(); j++){
~^~~~~~~~~
aaqqz.cpp:33:31: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int j=0; j<F.size() && j<w.size(); j++){
~^~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
7 ms |
376 KB |
Output is correct |
2 |
Incorrect |
7 ms |
376 KB |
Output isn't correct |
3 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
7 ms |
376 KB |
Output is correct |
2 |
Incorrect |
7 ms |
376 KB |
Output isn't correct |
3 |
Halted |
0 ms |
0 KB |
- |