首页 > 其他分享 >JOIOI の塔 题解

JOIOI の塔 题解

时间:2022-11-03 22:33:07浏览次数:84  
标签:int 题解 mid JOIOI ++ cnt2 cnt1 res

题目传送门

洛谷上竟然还没有题解...

题目分析

简单贪心题。

考虑倒过来寻找。显然,如果一个 J 想要配成一座塔,那么必须要找一个 OIO 更简单,就是直接找到一个 I 放上去就行。

最难的是 I,它既可以选择单开一座塔,也可以选择放在原来的塔上面组成 IOI。然后贪心思考,发现如果塔底的数量少于需求的数量,那么单开一座塔更优,否则放原来的塔更优。

然后就是二分答案,二分所需的塔底数量,跑一遍模拟。

贴上代码

#include<bits/stdc++.h>
#define int long long 
using namespace std;
const int maxn=1e6+5;
int n;
int ans;
int l,r;
string s;
inline void init(){
	cin>>n;cin>>s;s=" "+s;
	l=1;r=n;
}
bool check(int x){
	int res=0,cnt1=0,cnt2=0;
	for(register int i=n;i>=1;--i){
		if(res==x) return true;
		if(s[i]=='J'){
			if(cnt1!=0){
				cnt1--;res++;
			}
		}
		else if(s[i]=='O'){
			if(cnt2!=0){
				cnt2--;cnt1++;
			}
		}
		else{
			if(cnt1+cnt2+res>=x&&cnt1!=0){
				cnt1--;res++;
			}
			else cnt2++;
		}
	}
	if(res==x) return true;
	return false;
}
signed main(){
	init();
	while(l<=r){
		int mid=(l+r)>>1;
		if(check(mid)==true){
			l=mid+1;ans=mid;
		}
		else r=mid-1;
	}
	cout<<ans<<endl;
}

标签:int,题解,mid,JOIOI,++,cnt2,cnt1,res
From: https://www.cnblogs.com/yizhixiaoyun/p/16856084.html

相关文章

  • CF912D 小鱼仔 题解
    这是一个很邪门的贪心考虑到最终答案是每个正方形的贡献除以总的正方形个数,而正方形个数容易计算,那么只需最大化贡献。从题面给出的图易得每个点被覆盖的次数是一定的,我......
  • ckeditor粘贴word图片问题解决
    ​ 自动导入Word图片,或者粘贴Word内容时自动上传所有的图片,并且最终保留Word样式,这应该是Web编辑器里面最基本的一个需求功能了。一般情况下我们将Word内容粘贴到Web编辑......
  • [ARC087F] Squirrel Migration 题解
    [ARC087F]SquirrelMigration给你一个\(n\)个节点的树,求一个\(1\simn\)的排列\((p_1,p_2,\dotsp_n)\),使得\(\sumdist(i,p_i)\)最大。求这样的排列个数。答案......
  • 【题解】P8818 [CSP-S 2022] 策略游戏
    【题解】P8818[CSP-S2022]策略游戏这道题应该是CSP-S2022所有题里面最简单的一道了,主要是有点套路,刨开套路,其实就是个静态维护区间最大最小值的板子。作为一名场外......
  • [题解] HDU7060 Separated Number 思路整理
    题目链接HDU7060SeparatedNumber题目大意给一个\(n\)位数,把该数字分成\(k\)段,每种方案的贡献为其分割出的段的数字之和。求所有分法的贡献之和(对\(998244353\)......
  • java 中文乱码问题解决思路
    碰到中文乱码,引起的原因一般为,在编写程序的时候的编码方式与查看的时候的编码方式不一致,从而导致了中文乱码。碰到这种问题,首先要做的就是查看自己编码方式,以String为例St......
  • 2022.11.2 模拟赛题解
    简要题意给定一棵\(n\)个节点的有根树,树根为\(1\)号节点,每个结点有一个权值\(a_i(|a_i|\leq10^9)\),求包含\(1\)的前\(k\)小的连通块的权值。简要题解前置内......
  • 11.2 解题报告&CSP-S 2022题解
    T1用时:\(1\)h期望得分:\(70\)~\(80\)实际得分:\(55\)这题考场写了个常数比较小的\(O(n^3)\)的做法,期望得分\(75\)左右,但是由于bfs忘记打标记导致MLE和TLE,挂......
  • P8671 [蓝桥杯 2018 国 AC] 约瑟夫环 题解
    约瑟夫环有\(\mathcalO(n)\)做法相信大家都知道。这里就不在介绍了,这里给出一个不知道这个结论的\(\mathcalO(n\logn)\)简单做法。考虑直接模拟题意,每次循环往后数......
  • [题解]CF1327F
    首先拆位,然后考虑限制会带来什么。要求与起来是\(1\)的必须全是\(1\),差分打个标记。要求与起来是\(0\)的必须至少有一个\(0\),考虑如何计数。计数问题有可能是动态......