1082B--Vova and Trophies

题目

Vova has won n trophies in different competitions. Each trophy is either golden or silver. The trophies are arranged in a row.

The beauty of the arrangement is the length of the longest subsegment consisting of golden trophies. Vova wants to swap two trophies (not necessarily adjacent ones) to make the arrangement as beautiful as possible — that means, to maximize the length of the longest such subsegment.

Help Vova! Tell him the maximum possible beauty of the arrangement if he is allowed to do at most one swap.

Input

The first line contains one integer n (2≤n≤10^5) — the number of trophies.

The second line contains n characters, each of them is either G or S. If the i-th character is G, then the i-th trophy is a golden one, otherwise it’s a silver trophy.

Examples
input
10
GGGSGGGSGG
output
7
input
4
GGGG
output
4
intput
3
SSS
output
0
Note

In the first example Vova has to swap trophies with indices 4 and 10. Thus he will obtain the sequence “GGGGGGGSGS”, the length of the longest subsegment of golden trophies is 7.

In the second example Vova can make no swaps at all. The length of the longest subsegment of golden trophies in the sequence is 4.

In the third example Vova cannot do anything to make the length of the longest subsegment of golden trophies in the sequence greater than 0.

题意:输入一个长度为n的字符串,字符串只包含字符G和S,有且仅有一次交换两个字符的机会,获得连续G的个数。
解题思路:首先分别计算S和G的个数,当S的个数小于2时,直接输出G的个数即可;否则,遍历字符串,当字符不为S时,对其长度L进行累加,取当前G和L的最大值;当字符为S时对其进行累加,并且当字符S的个数为大于1时,然后对其回溯到上次出现的位置,对字符S个数进行减1,且长度L–,继续遍历;最后输出连续G的个数和G的总个数的最小值。
AC–Code
import java.util.Scanner;

public class CF1082Bsove {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		String str = sc.next();
		sc.close();
		int  sCount = 0;
		int  gCount = 0;
		for (int i = 0; i <str.length(); i++) 
		{
			if(str.charAt(i)=='S')
			{
				sCount++;
			}
			else 
			{
				gCount++;
			}
		}
		if(sCount<2)
		{
			System.out.println(gCount);
			return ;
		}
		int sFar = 0;
		int l = 0;
		int maxl = 0;
		for(int i =0;i<n;i++)
		{
			if(str.charAt(i)=='S') 
			{
				sFar++;
			}
			while(sFar>1)
			{
				if(str.charAt(i-l)=='S')
				{
					sFar--;
				}
				l--;
			}
			l++;
			maxl = Math.max(maxl, l);
		}
		System.out.println(Math.min(maxl, gCount));
	}

}

Vova STC32系列单片机上位机进行PID(比例积分微分)控制的调试,通常涉及到以下几个步骤: 1. **PID算法理解**: PID控制器由比例(P)、积分(I)和微分(D)三个部分组成,用于实时调整系统的输出,以稳定给定的输入。 2. **硬件连接**: 首先,确保你的STC32单片机和上位机(如PC或嵌入式开发板)之间有正确连接。可能需要串口通信(例如UART),并通过编程将PID参数传输到单片机。 3. **PID库或函数**: 使用STC32的C语言库或者自定义函数实现PID算法。这可能包括设置PID系数(Kp, Ki, Kd)、计算输出值、以及更新系统状态等。 4. **初始化和配置**: 初始化PID控制器,设定死区、积分限幅和微分滤波时间常数等参数,以避免积分发散和过快的微分响应。 5. **数据采集与反馈**: 单片机需要从传感器读取实际测量值,并将此值作为PID算法的输入。 6. **单片机编程**: 编写单片机代码,调用PID函数,根据反馈值计算出控制输出,并驱动执行器。 7. **调试过程**: - 在上位机软件中,你可以使用串口监视器观察通信数据,确认PID的输入输出是否正常。 - 调整PID参数,观察系统的动态响应是否改善,是否存在振荡或过度调整。 - 如果有问题,检查硬件连接、代码逻辑和参数设置。 8. **性能优化**: 可能需要通过实验或理论分析来调整PID参数,直到达到满意的控制精度和稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值