Codeforces 174B【模拟构造】

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

否则都不行;

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

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

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

#include 
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
typedef pairPII;
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; i8||!temp_num)
                {
                    puts("NO");
                    return 0;
                }
                temp[temp_num]='\0';
                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]='\0';
                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]='\0';
    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;i3)
            kp=3;
        else
            kp=1;
        if(i==num-1)
            kp=q[i].length;
        for(int j=0;j


你可能感兴趣的:(codeforces,构造)