HDU 5944 Fxx and string && BestCoder Round #89 1001(细节)

来源:互联网 发布:盖革计数器知乎 编辑:程序博客网 时间:2024/05/18 06:21


Fxx and string

 
 Accepts: 213
 
 Submissions: 1867
 Time Limit: 2000/1000 MS (Java/Others)
 
 Memory Limit: 131072/65536 K (Java/Others)
问题描述
青年理论计算机科学家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行。每行一个整数表示答案。
输入样例
2xyyrxxyyrrxxxxx
输出样例
02

思路:读题的时候,看到i,j,k成等比数列难道没有疑问吗。。。到底是递增序列还是递减序列。。。读题能力太差。。。

代码:

#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <queue>#include <map>using namespace std;const int maxn = 1e5;char str[maxn];int main(){    int t;    scanf("%d", &t);    while(t--)    {        scanf("%s", str+1);        str[0] = ' ';        int ans = 0, len = strlen(str);//        cout << len << endl;        for(int i = 1; i < len; i++)        {            if(str[i] == 'y')            {                for(int j = i * 2; j < len; j += i)                {                    if(str[j] == 'r')                    {                        int x = j * (j / i);                        if(x < len)                        {                            if(str[x] == 'x')                            ans++;                        }                    }                }            }            if(str[i] == 'x')            {                for(int j = i * 2; j < len; j += i)                {                    if(str[j] == 'r')                    {                        int x = j * (j / i);                        if(x < len)                        {                            if(str[x] == 'y')                            ans++;                        }                    }                }            }        }        printf("%d\n", ans);    }    return 0;}Close




1 0
原创粉丝点击