【HDU 5944】Fxx and string

博客提及一道题目,题意为(i,j,k)是等比数列相邻三项,且Si='y',Sj='r',Sk='x',j为中间项,解题方法是直接枚举公比。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.题目链接。题意比较简单,想表达的意思就是(i,j,k)是等比数列的相邻的三项,Si='y',Sj='r',Sk='x'.满足这些条件。而且第三点还强调了,j必须是中间项。

2.直接枚举一下公比完事了。

#include<bits/stdc++.h>
using namespace std;
const int maxn = 10010;
char s1[maxn],s[maxn];
#pragma warning(disable:6031)
int main()
{
	int T;
	scanf("%d", &T);	
	while (T--)
	{
		scanf("%s", s1);
		int len = strlen(s1);

		for (int i = 1; i <= len; i++)
		{
			s[i] = s1[i - 1];
		}
		int ans = 0;
		for (int q = 2; q <= 100; q++)
		{
			for (int i =1; i <=len; i++)
			{
				int j = i * q;
				
				int k = j * q;
				if (j <= len && k <= len&&s[i] == 'y' && s[j] == 'r' && s[k] == 'x')ans++;
			}
		}

		for (int q = 2; q <= 100; q++)
		{
		
			for (int k = 1; k <= len; k++)
			{
				int j = k * q;
				int i = j * q;
				if (i <= len && j <= len&&s[k] == 'x' && s[j] == 'r' && s[i] == 'y')ans++;
			}
		}
		cout << ans << endl;
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值