NOI元丹

#include<iostream>
#include<cstring>
using namespace std;
string a,c="O",d="I";
int len,aa[10000],N,O,I,maxx;
int main(){
    cin>>len>>a;
    for(int i=len-1;i>=0;i--){
        if(a[i]==‘N‘){
            N+=O;
            aa[i]=N;
        }
        if(a[i]==‘O‘){
            O+=I;
            aa[i]=O;
        }
        if(a[i]==‘I‘){
            I++;
            aa[i]=I;
        }
    }
    maxx=N+O;
    d=a+d;
    N=0;
    O=0;
    I=0;
    for(int i=len;i>=0;i--){
        if(d[i]==‘N‘){
            N+=O;
            aa[i]=N;
        }
        if(d[i]==‘O‘){
            O+=I;
            aa[i]=O;
        }
        if(d[i]==‘I‘){
            I++;
            aa[i]=I;
        }
    }
    if(N>maxx)maxx=aa[0];
    for(int i=len-1;i>=0;i--){
        if(a[i]==‘N‘){
            a.insert(i+1,c);
            break;
        }
    }
    N=0;
    O=0;
    I=0;
    for(int i=len;i>=0;i--){
        if(a[i]==‘N‘){
            N+=O;
            aa[i]=N;
        }
        if(a[i]==‘O‘){
            O+=I;
            aa[i]=O;
        }
        if(a[i]==‘I‘){
            I++;
            aa[i]=I;
        }
    }
    if(N>maxx)maxx=aa[0];
    cout<<maxx;
    return 0;
}

54 NONOONIONIINIOOONONIIIINNONOINOONNOOIIOIOIOIINONNNIOON
10 ONNINNONNI

时间: 2024-10-10 18:28:47

NOI元丹的相关文章

【洛谷P1371】NOI元丹

不考虑insert 则NOI的个数可通过O(n)递推得到: sum_NOI<--sum_NO<--sum_N 考虑insert: 首先预处理对于每个N,其后面的O和I各有多少个 N:显然插入在最前面 I:最后面 O:枚举断点,前面的N*后面的I,取max 1 #include<cstdio> 2 #include<cstring> 3 using namespace std; 4 #define ll long long 5 const int L=100100; 6

洛谷10月月赛Round.3

Rank11:260=60+100+100 P2409 Y的积木 题目背景 Y是个大建筑师,他总能用最简单的积木拼出最有创意的造型. 题目描述 Y手上有n盒积木,每个积木有个重量.现在他想从每盒积木中拿一块积木,放在一起,这一堆积木的重量为每块积木的重量和.现在他想知道重量和最小的k种取法的重量分别是多少.(只要任意更换一块积木,就视为一种不同的取法.如果多种取法重量总和一样,我们需要输出多次.) 输入输出格式 输入格式: 第一行输入两个整数,n,k,意义如题目所描述. 每组数据接下来的n行,第

[NOI2011]Noi嘉年华

题目描述 NOI2011 在吉林大学开始啦!为了迎接来自全国各地最优秀的信息学选手,吉林大学决定举办两场盛大的 NOI 嘉年华活动,分在两个不同的地点举办.每个嘉年华可能包含很多个活动,而每个活动只能在一个嘉年华中举办. 现在嘉年华活动的组织者小安一共收到了 n个活动的举办申请,其中第 i 个活动的起始时间为 Si,活动的持续时间为Ti.这些活动都可以安排到任意一个嘉年华的会场,也可以不安排. 小安通过广泛的调查发现,如果某个时刻,两个嘉年华会场同时有活动在进行(不包括活动的开始瞬间和结束瞬间)

bzoj4622 [NOI 2003] 智破连环阵

Description B国在耗资百亿元之后终于研究出了新式武器——连环阵(Zenith Protected Linked Hybrid Zone).传说中,连环阵是一种永不停滞的自发性智能武器.但经过A国间谍的侦察发现,连环阵其实是由M个编号为1,2,…,M的独立武器组成的.最初,1号武器发挥着攻击作用,其他武器都处在无敌自卫状态.以后,一旦第i(1<=i< M)号武器被消灭,1秒种以后第i+1号武器就自动从无敌自卫状态变成攻击状态.当第M号武器被消灭以后,这个造价昂贵的连环阵就被摧毁了.为

NOI 2001 &amp; luogu P2024 &amp; POJ 1182食物链

食物链 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 71707   Accepted: 21240 Description 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种. 有人用两种说法对这N个动物所构成的食物链关系进行描述: 第一种说法是"1 X Y",表示X和Y是同

NOI 6045 开餐馆

http://noi.openjudge.cn/ch0206/6045/ 描述 北大信息学院的同学小明毕业之后打算创业开餐馆.现在共有n 个地点可供选择.小明打算从中选择合适的位置开设一些餐馆.这 n 个地点排列在同一条直线上.我们用一个整数序列m1, m2, ... mn 来表示他们的相对位置.由于地段关系,开餐馆的利润会有所不同.我们用pi 表示在mi 处开餐馆的利润.为了避免自己的餐馆的内部竞争,餐馆之间的距离必须大于k.请你帮助小明选择一个总利润最大的方案. 输入标准的输入包含若干组测试

noi 9268 酒鬼

题目链接:http://noi.openjudge.cn/ch0206/9268/ 题意:有N瓶酒,不能连续喝>=3瓶的酒,问能喝的最大的酒量. f[i][j] 前 I 瓶中连续喝了 j 瓶的最大酒量 f[i][0] = f[i-1][3]; f[i][1,2] = f[i-1][j-1] + a[i]; #include <bits/stdc++.h> using namespace std; int a[710]; int f[710][4]; int main() { int n;

noi 9271 奶牛散步

题目链接:http://noi.openjudge.cn/ch0206/9271/ 同noi 踩方格,但是题目有问题,%12345,我也是看了discuss才知道的. #include <bits/stdc++.h> using namespace std; unsigned long long d[1005]; int main() { d[1] = 3; d[2] = 7; for(int i=3;i<=1001;i++) d[i] = (2*d[i-1] + d[i-2])%123

noi 8787 数的划分

题目链接:http://noi.openjudge.cn/ch0206/8787/ 将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序). 简直跟分苹果一模一样. #include <stdio.h> using namespace std; int d[15][15]; int dp(int m,int n) { if(m==0||n==1) return 1; if(m<n) return dp(m,m); else return dp(m,n-1)+dp(m-n,n);