zoukankan      html  css  js  c++  java
  • HDU 5455 Fang Fang 水题,但题意描述有问题

    题目大意:f[1]=f,f[2]=ff,f[3]=ffc,以后f[n]每增加1,字符串增加一个c。给出一个字符串,求最少有多少个f[]组成。(字符串首尾相连,比如:ffcf可看做cfff)

    题目思路:判断多少个c,但是每个c之间必须有两个f,首尾的c也应判断首尾相连后两者之间的距离。坑点在与

    1.给出的字符串中可能包含其它字符

    2.严格按照gets()读入

    3.若不含c,求有多少个f[2],若有多余补上一个f[1]

    3.1.出题人神经病

    #include<cstdio>
    #include<stdio.h>
    #include<cstdlib>
    #include<cmath>
    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #include<vector>
    #include<queue>
    #define INF 0x3f3f3f3f
    #define MAX 1000100
    #define mod 1000000007
    
    using namespace std;
    
    char str[MAX];
    int index[MAX];//存储每个c的位置
    
    int check()
    {
        int len,i,j,ans=0,sum=0,ok=0,flag=0,cnt=1;
        memset(index,0,sizeof(index));
        len=strlen(str);
        if(len==0)
            return -1;
        for(i=0;i<len;i++)
        {
            if(str[i]=='c')
            {
                index[cnt++]=i;
                sum++;
            }
            else if(str[i]!='c' && str[i]!='f')//存在其他字符直接返回0
                return 0;
        }
        cnt--;
    
        if(sum  > (len-1)/2)
            return 0;
        for(i=2;i<=cnt;i++)
        {
            if(index[i] - index[i-1] <= 2)//每个c至少相隔2个单位
                return 0;
        }
        if(cnt > 1)//判断收尾的c之间的距离
        {
            int k=len-(index[cnt]-index[1]);//
            if(k <= 2)
                return 0;
        }
    
        if(sum==0)//如果没有c,求str中有多少个f【2】,不够上一个补f【1】
        {
            return (len+1)/2;
        }
    
        return sum;
    }
    int main()
    {
        int T,ans,cnt=1;
        scanf("%d",&T);
        getchar();
        while(T--)
        {
            gets(str);
            ans=check();
            if(ans==0)
                ans=-1;
            else if(ans==-1)
                ans=0;
            printf("Case #%d: %d
    ",cnt++,ans);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    【NOIP2001】【Luogu1025】数的划分(可行性剪枝,上下界剪枝)
    【POJ2676】Sudoku(优化搜索顺序)
    【codevs4228】小猫爬山(最优化剪枝)
    实现两个路由器漫游(传统路由器做AP)
    查询数据SELECT 之单表查询
    MySQL数据库基础概念
    删除Mac上的mysql数据库
    MYSQL数据库
    并发编程
    socketserver及相关的类 (处理socket服务端)+ event事件的使用
  • 原文地址:https://www.cnblogs.com/alan-W/p/5791582.html
Copyright © 2011-2022 走看看