zoukankan      html  css  js  c++  java
  • Codeforces 174B【模拟构造】

    题意:
    给你一个串只有小写字母和点,让你构造前缀是1-8,后缀是1-3长度的文件名;
    思路:
    那么以"."作为分割点,把字符串都拿出来,然后
    首段长度<=8 OK;
    中间<=11 OK;
    尾段<=3 OK;

    否则都不行;

    啊,水题啊,wa了一次,T了一次,神TM都是数据开小了,

    一个是4e5写成5e4。。。

    一个是不满足的情况可能会很长,才开了。。。25...

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    typedef unsigned long long ULL;
    typedef pair<int,int>PII;
    const double eps=1e-5;
    const double pi=acos(-1.0);
    const int INF=0x3f3f3f3f;
    
    const int N=4e5+10;
    struct asd
    {
        int length;
        char tep[50];
    };
    int num;
    asd q[N];
    char s[N];
    
    char ans[N][50];
    char temp[N];
    
    int main()
    {
        int temp_num;
        scanf("%s",s);
        int len=strlen(s);
        bool flag=false;
        num=0;
        temp_num=0;
        for(int i=0; i<len; i++)
        {
            if(s[i]=='.')
            {
                if(!flag)
                {
                    if(temp_num>8||!temp_num)
                    {
                        puts("NO");
                        return 0;
                    }
                    temp[temp_num]='';
                    strcpy(q[num].tep,temp);
                    q[num].length=temp_num;
                    num++;
                    flag=true;
                }
                else
                {
                    if(temp_num>11||temp_num<2)
                    {
                        puts("NO");
                        return 0;
                    }
                    temp[temp_num]='';
                    strcpy(q[num].tep,temp);
                    q[num].length=temp_num;
                    num++;
                }
                temp_num=0;
            }
            else
                temp[temp_num++]=s[i];
        }
        if(!temp_num||temp_num>3||!flag)
        {
            puts("NO");
            return 0;
        }
        temp[temp_num]='';
        strcpy(q[num].tep,temp);
        q[num].length=temp_num;
        num++;
        int kp=0;
        int ans_num=0;
        int pp=0;
        for(int i=1;i<num;i++)
        {
            pp=0;
            for(int j=kp;j<q[i-1].length;j++)
                ans[ans_num][pp++]=q[i-1].tep[j];
            ans[ans_num][pp++]='.';
            if(q[i].length>3)
                kp=3;
            else
                kp=1;
            if(i==num-1)
                kp=q[i].length;
            for(int j=0;j<kp;j++)
                ans[ans_num][pp++]=q[i].tep[j];
            ans[ans_num][pp]='';
            ans_num++;
        }
        puts("YES");
        for(int i=0;i<ans_num;i++)
            printf("%s
    ",ans[i]);
        return 0;
    }
    
    
    


  • 相关阅读:
    Oracle 数据块,文件块转换,查看数据块对像
    逆向与汇编视频(36课) IDA 使用
    VC++消息钩子编程
    VS2008中opengl配置
    BSP技术详解3有图有真相
    BSP技术详解1有图有真相
    oracle 跟踪文件和转储命令
    BSP技术详解2有图有真相
    Recognizing and Learning Object Categories 连接放送
    自学MVC看这里——全网最全ASP.NET MVC 教程汇总
  • 原文地址:https://www.cnblogs.com/keyboarder-zsq/p/6777498.html
Copyright © 2011-2022 走看看