Submission #120148

# Submission time Handle Problem Language Result Execution time Memory
120148 2019-06-23T14:53:36 Z errorgorn JOIOJI (JOI14_joioji) C++14
100 / 100
32 ms 11168 KB
#include <cstdio>
#include <unordered_map>
#include <utility>
#include <string>
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
typedef pair<int,int> ii;
int n;
char c;
string s;
struct custom_hash{
    size_t operator()(const pair<int,int> &i)const{
        return (i.first<<8)^i.second;
    }
};
unordered_map<ii,int,custom_hash> suffix;
int arr[3];
int pre[3];
int main(){
    suffix.reserve(4096);
    suffix.max_load_factor(0.25);
    //freopen("input.txt","r",stdin);
    scanf("%d",&n);
    getchar();
    c=getchar();
    while (c!='\n'){
        s+=c;
        if (c=='J') arr[0]++;
        else if (c=='O') arr[1]++;
        else arr[2]++;
        c=getchar();
    }
    suffix[ii(0,0)]=0;
    for (int x=0;x<3;x++) pre[x]=arr[x];
    for (int x=0;x<s.size();x++){
        if (s[x]=='J') pre[0]--;
        else if (s[x]=='O') pre[1]--;
        else pre[2]--;
        suffix[ii(pre[0]-pre[1],pre[0]-pre[2])]=x+1;
    }
    memset(pre,0,sizeof(pre));
    int ans=0;
    int a=arr[0]-arr[1],b=arr[0]-arr[2];
    for (int x=0;x<s.size();x++){
        ans=max(ans,suffix[ii(a-(pre[0]-pre[1]),b-(pre[0]-pre[2]))]-x);
        if (s[x]=='J') pre[0]++;
        else if (s[x]=='O') pre[1]++;
        else pre[2]++;
    }
    printf("%d\n",ans);
}

Compilation message

joioji.cpp: In function 'int main()':
joioji.cpp:37:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int x=0;x<s.size();x++){
                  ~^~~~~~~~~
joioji.cpp:46:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int x=0;x<s.size();x++){
                  ~^~~~~~~~~
joioji.cpp:25:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d",&n);
     ~~~~~^~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 2 ms 384 KB Output is correct
2 Correct 2 ms 384 KB Output is correct
3 Correct 2 ms 384 KB Output is correct
4 Correct 2 ms 384 KB Output is correct
5 Correct 2 ms 384 KB Output is correct
6 Correct 2 ms 384 KB Output is correct
7 Correct 2 ms 384 KB Output is correct
8 Correct 2 ms 384 KB Output is correct
9 Correct 2 ms 384 KB Output is correct
10 Correct 2 ms 384 KB Output is correct
11 Correct 2 ms 384 KB Output is correct
12 Correct 2 ms 384 KB Output is correct
13 Correct 2 ms 384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 384 KB Output is correct
2 Correct 2 ms 384 KB Output is correct
3 Correct 2 ms 512 KB Output is correct
4 Correct 2 ms 512 KB Output is correct
5 Correct 2 ms 512 KB Output is correct
6 Correct 2 ms 384 KB Output is correct
7 Correct 2 ms 384 KB Output is correct
8 Correct 2 ms 512 KB Output is correct
9 Correct 3 ms 512 KB Output is correct
10 Correct 2 ms 512 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 640 KB Output is correct
2 Correct 6 ms 1652 KB Output is correct
3 Correct 8 ms 1752 KB Output is correct
4 Correct 14 ms 3032 KB Output is correct
5 Correct 20 ms 5676 KB Output is correct
6 Correct 25 ms 5804 KB Output is correct
7 Correct 24 ms 5804 KB Output is correct
8 Correct 24 ms 5796 KB Output is correct
9 Correct 25 ms 5804 KB Output is correct
10 Correct 23 ms 5796 KB Output is correct
11 Correct 30 ms 6312 KB Output is correct
12 Correct 20 ms 3252 KB Output is correct
13 Correct 22 ms 1744 KB Output is correct
14 Correct 32 ms 11168 KB Output is correct
15 Correct 18 ms 1796 KB Output is correct