列表

详情


NC214392. 2020

描述

Bobo有一个只包含数字 0,1, 2 的,长度为 n 的字符串 s1 ... sn。他想选出最多的互不重叠的连续子串,这些子串都是2020。求最多可以选出的子串数量。
形式化的,他想求出最大的 k ,是的存在 k 个下标 i1,...,ik 满足
  ·  
  ·  对于,满足

输入描述

输入文件包含多组数据,请处理到文件结束。
每组数据的第一行包括一个整数 n ,第二行包括一个字符串s1 ... sn
 · 1 ≤ n ≤ 105
 · s∈ {0, 1, 2}
 · n 的和不超过106

输出描述

对于每组数据,输出一个整数,表示所求的值

示例1

输入:

4
2020
6
202020
10
1202012020

输出:

1
1
2

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C(clang11) 解法, 执行用时: 13ms, 内存消耗: 1436K, 提交时间: 2020-12-18 16:13:12

#include <stdio.h>
int main()
{
	int i,k,in,ax,n;char t[100000];
	while(scanf("%d",&n)!=EOF)
	{   int s=0;
		scanf("%s",t);
		for(i=3;i<n;i++)
			if(t[i-3]=='2'&&t[i-2]=='0'&&t[i-1]=='2'&&t[i]=='0')
		{s++;i+=3;}
		printf("%d\n",s);
	}
	return 0;
}

C++(clang++11) 解法, 执行用时: 69ms, 内存消耗: 600K, 提交时间: 2020-12-02 17:50:31

#include<bits/stdc++.h>
using namespace std;
int n;
string s; 
int main()
{
    while(cin >> n >> s)
    {
		int ans = 0;
		for(const char *p = s.data(); p = strstr(p, "2020"); p += 4, ans++);
		cout << ans << endl;
	}
}

Python3 解法, 执行用时: 95ms, 内存消耗: 5268K, 提交时间: 2022-06-11 22:37:10

while True:
    try:
        input()
        print(len(input().split('2020'))-1)
    except:
        break

上一题