zoukankan      html  css  js  c++  java
  • hdu 5944 Fxx and string

    :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/j和k/jk/j中必须有整数: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/j和k/jk/j中必须有整数: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/j和k/jk/j中必须有整数

    题意确实有点不清晰,第3点应该是i必须被j整除且j必须被k整除,之后就是循环i,枚举q,暴力解题
    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    using namespace std;
    char a[10010];
    int main()
    {
        int T;
        scanf("%d",&T);
        while(T--)
        {
            scanf("%s",a+1);
            int ans=0;
            int n=strlen(a+1);
            for(int i=1; i<=n; i++)
            {
                if(a[i]=='y')
                    for(int j=2; i*j*j<=n; j++)
                    {
                        if(a[i*j]=='r'&&a[i*j*j]=='x') ans++;
                    }
            }
            for(int i=n; i>=1; i--)
            {
                if(a[i]=='y')
                    for(int j=2; i/j/j>=1; j++)
                    {
                        if((i%j)||(i%(j*j))) continue;
                        if(a[i/j]=='r'&&a[i/j/j]=='x') ans++;
                    }
            }
            printf("%d
    ",ans);
        }
        return 0;
    }
    View Code
    
    
    
    
    
    
    
    
    
  • 相关阅读:
    ubuntu14.04通过将语音,耳机没有声音
    网络编程easy错误点-手知道
    如何实现网页在线咨询框架
    C++定义自己的命名空间和头文件
    使用光标
    工作日两个日期之间的数
    Swift
    Swift
    Swift
    Swift
  • 原文地址:https://www.cnblogs.com/zsyacm666666/p/6123594.html
Copyright © 2011-2022 走看看