Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
51699 | lgh | 最优子序列 | C++ | 解答错误 | 5 | 0 MS | 272 KB | 1326 | 2022-07-13 13:00:51 |
#include <bits/stdc++.h> using namespace std; int n,k,type; string s; void SubTask1() { string x=s; int ans=s.size(),t[13]= {0},o[13]= {0}; bool vis[13]= {0}; for(int i=0; i<s.size(); i++) { t[(int)s[i]-'a'+1]++; if(i==1 && s[0]==s[1]) o[(int)s[i]-'a'+1]+=2,vis[(int)s[i]-'a'+1]=true; else if(s[i]==s[i-1] && s[i-1]!=s[i-2] && vis[(int)s[i]-'a'+1]==false) o[(int)s[i]-'a'+1]+=2,vis[(int)s[i]-'a'+1]=true; else if(s[i]==s[i-1] && s[i-1]==s[i-2]) o[(int)s[i]-'a'+1]++; } // for(int i=1; i<=12; i++) cout<<t[i]<<' '<<o[i]<<endl; for(int i=1; i<=12; i++) if(t[i]>1 && t[i]!=o[i]) ans-=t[i]-(o[i]==0?1:o[i]); cout<<ans+2<<endl; } void SubTask2() { char x[5]= {' ','a','b','c','d'}; int a[5]= {0},ans=1,b[5]= {0}; for(int i=1; i<=4; i++) { if(s.find(x[i])==-1) continue; if(s[0]==x[i]) b[i]++; for(int j=1; j<s.size(); j++) { if(s[j]==x[i]) b[i]++; if(s[j]==s[j-1]&&s[j]==x[i]) ans++; else a[i]=max(ans,a[i]),ans=1; } } cout<<max(a[1]+a[2]+a[3]+a[4],max(b[1],max(b[2],max(b[3],b[4]))))<<endl; } int main() { // freopen("seq.in","r",stdin); // freopen("seq.out","w",stdout); cin>>n>>k>>type>>s; if(k<=4) { SubTask2(); return 0; } else if(n<=3000) { SubTask1(); return 0; } return 0; }