看到别人做好奇点进去,随便写了没想到居然过了 没标题,实在不知道这个解法叫啥 统计前i位’J’的个数x,’O’的个数y,’I’的个数z 两两差分得到二元组
#include <iostream>#include <cstdio>#include <algorithm>#define N 1000050using namespace std;struct sn{ int a,b,_; }Q[N];bool Operator != (sn p1,sn p2) { return p1.a != p2.a || p1.b != p2.b;}int n;char s[N];bool cmp(sn p1,sn p2) { if (p1.a != p2.a) return p1.a < p2.a; if (p1.b != p2.b) return p1.b < p2.b; return p1._ < p2._;}int main() { scanf("%d",&n); scanf("%s",s+1); int x = 0 , y = 0 , z = 0; for (int i=1;i<=n;i++) { s[i] == 'J' ? x++ : 0; s[i] == 'O' ? y++ : 0; s[i] == 'I' ? z++ : 0; Q[i] = (sn){y-x,z-y,i}; } sort(Q,Q+n+1,cmp); int h = 0 , t = -1 , ans = 0; while (++t <= n) { while (Q[h] != Q[t]) h++; ans = max(ans , Q[t]._ - Q[h]._); } PRintf("%d/n",ans); return 0;}新闻热点
疑难解答