HDU 5944 Fxx and string(数学)

4 篇文章 0 订阅
3 篇文章 0 订阅
问题描述
青年理论计算机科学家Fxx得到了一个只包含小写字母的字符串。

字符串的长度为\:nn,下标从1开始,第\:i\:i位的字母为\:s_isi,现在Fxx想知道有多少三元组\:(i,j,k)\:(i,j,k)满足下列条件

1、i,j,k\:i,j,k三个数成等比数列

2、s_i=si='yy',s_j=,sj='rr',s_k=,sk='xx'

3.i/ji/jk/jk/j中必须有整数
输入描述
第一行一个整数\:T(1\leq T\leq100)\:T(1T100)表示数据组数。

接下来\:T\:T行,每行一个仅包含小写字母的字符串(字符串长度不超过\:1000010000
输出描述
输出共\:T\:T行。

每行一个整数表示答案。
输入样例
2
xyyrxx
yyrrxxxxx
输出样例
0
2

注意:公比可能小于一

代码如下:

#include<cstdio>
#include<cstring>
#include<algorithm> 
using namespace std;
char a[100010];
int main()
{
	int t;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%s",a);
		int len=strlen(a);
	    int q,i,j,k;
	    int num=0;
		for(int p=0;p<len;p++)
		{
           int i=p+1;
		   for(q=2;;q++)
		   {
	         j=i*q;
			 k=j*q;
			 if(k>len)
			 break;
			 if(a[i-1]=='y'&&a[j-1]=='r'&&a[k-1]=='x')
			 {
			 	num++;
			 }
			 if(a[i-1]=='x'&&a[j-1]=='r'&&a[k-1]=='y')//公比小于1的情况 
			 {
			 	num++;
			 }
		   }		
		   
		}
		printf("%d\n",num);	
	} 
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值