您的位置:首页 > 其它

hdu 5944 Fxx and string【暴力枚举】

2016-10-30 13:10 288 查看


Fxx and string

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)

Total Submission(s): 376    Accepted Submission(s): 171


Problem Description

Young theoretical computer scientist Fxx get a string which contains lowercase letters only.

The string S contains n lowercase
letters S1S2…Sn.Now
Fxx wants to know how many three tuple (i,j,k) there
are which can meet the following conditions:

1、i,j,k are
adjacent into a geometric sequence.

2、Si='y',Sj='r',Sk='x'.

3.Either j|i or j|k

 

Input

In the first line, there is an integer T(1≤T≤100) indicating
the number of test cases.

T lines
follow, each line contains a string, which contains only lowercase letters.(The length of string will not exceed 10000).

 

Output

For each case, output the answer.

 

Sample Input

2
xyyrxx
yyrrxxxxx

 

Sample Output

0
2

 

Source

BestCoder Round #89

 

题目大意:

在字符串中找到三元组(i,j,k)使得其是一个等比数列,使得ai=y,aj=r,ak=x;

问一共有多少种情况。

思路;

1、O(n)枚举起点,枚举一个等比数列的q,暴力找三元组判定即可。

2、注意1 3 9是等比数列,9 3 1也是等比数列。

Ac代码:

#include<stdio.h>
#include<string.h>
using namespace std;
#define ll __int64
char a[100500];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%s",a+1);
int n=strlen(a+1);
ll output=0;
for(int i=1;i<=n;i++)
{
for(int j=2;j<=n;j++)
{
if(i*j<=n&&i*j*j<=n)
{
if(a[i]=='y'&&a[i*j]=='r'&&a[i*j*j]=='x')
{
output++;
}
if(a[i]=='x'&&a[i*j]=='r'&&a[i*j*j]=='y')
{
output++;
}
}
else break;
}
}
printf("%I64d\n",output);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hdu 5944 杭电 5944