本文主要是介绍CF 1900A Cover in Water 学习笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
原题链接
传送门
题意
给定多个细胞,细胞有两种情况,一种情况是空的,另一种情况是阻塞的,可以往空的细胞里面装水,可以把装水细胞里面的水转移到另一个细胞里面,阻塞的细胞不能进行任何操作,如果一个空的细胞左右两边的细胞都有水,该细胞也会有水(大概类似于渗透作用),问需要多少水可以使得所有的空细胞里面装满水
代码
#include<bits/stdc++.h>
using namespace std;int main()
{int t;scanf("%d",&t);while(t--){int n;scanf("%d",&n);string s;cin>>s;int length=s.size();bool flag=false;int cnt=0;for(int i=0;i<length;i++){if(s[i]=='.'&&s[i+1]=='.'&&s[i+2]=='.') {flag=true;break;}if(s[i]=='.') cnt++;}if(flag==true) printf("2\n");else printf("%d\n",cnt);}return 0;
}
总结
1.遍历所有细胞,发现有连续的三个空细胞,可以把第一个和第三个空细胞装满水,中间的空细胞会因为类似渗透作用的原因充满水,然后把中间的空细胞的水取走,转移到其他空细胞,中间的空细胞又会因为渗透作用充满水,也就是说拥有了源源不断的水,只要出现连续的三个空细胞,只需要两份水,可以满足任意多的空细胞的要求
2.如果没有连续的三个空细胞,有多少个空细胞就需要多少份水
3.字符串长度使用s.zize()来计算
这篇关于CF 1900A Cover in Water 学习笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!