`
fulerbakesi
  • 浏览: 562636 次
文章分类
社区版块
存档分类
最新评论

NBUT 1189 Join the Lyrics Player(字符串处理)

 
阅读更多

题目链接:Click here~~

题意:

给你一个lrc歌词文件,文件中,每行前面是若干个时间标签,当当前时间大于等于此标签且小于其他时间标签时,输出此行歌词。

然后给你一个时间,输出这个时间应该输出的歌词。

解题思路:

从这个时间向前找,直到找到某个时间在标签中出现过,然后输出所在标签的歌词。

由于时间格式特点,我们可以用一个int型变量储存它的状态i。

然后用一维数组tim[i]记录这个时间应该输出的歌词的序号。

细心些就好了。

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define N 200
char str[N][2000];
char tim[1000005];
int loc[N],h,m,s;
bool judge(char *S)
{
    if(*S!='[')
        return 0;
    for(int i=1;i<=2;i++)
        if(!isdigit(*(S+i)))
            return 0;
    if(*(S+3)!=':')
        return 0;
    for(int i=4;i<=5;i++)
        if(!isdigit(*(S+i)))
            return 0;
    if((*(S+4)-'0')*10 + (*(S+5)-'0')>=60)
        return 0;
    if(*(S+6)!='.')
        return 0;
    for(int i=7;i<=8;i++)
        if(!isdigit(*(S+i)))
            return 0;
    if(*(S+9)!=']')
        return 0;
    return 1;
}
int to(int a,int b,int c)
{
    return a*10000 + b*100 + c;
}
void div(int id,char *S)
{
    int len = 0;
    while(judge(S+len))
    {
        sscanf(S+len,"[%d:%d.%d]",&h,&m,&s);
        tim[to(h,m,s)] = id;
        len += 10;
    }
    loc[id] = len;
}
int main()
{
    int n,Q,ans;
    strcpy(str[0],"**************");
    while(~scanf("%d%d%*c",&n,&Q))
    {
        memset(tim,0,sizeof(tim));
        for(int i=1;i<=n;i++)
        {
            gets(str[i]);
            div(i,str[i]);
        }
        while(Q--)
        {
            ans = 0;
            scanf("%s",str[n+1]);
            sscanf(str[n+1],"%d:%d.%d",&h,&m,&s);
            for(;h>=0;h--)
            {
                for(;m>=0;m--)
                {
                    for(;s>=0;s--)
                    {
                        int x = tim[to(h,m,s)];
                        if(x != 0)
                        {
                            ans = x;
                            goto end;
                        }
                    }
                    s = 99;
                }
                m = 59;
            }
end:        for(int j=loc[ans];str[ans][j];j++)
                putchar(str[ans][j]);
            putchar('\n');
        }
    }
	return 0;
}


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics