南邮 OJ 1952 贲神的故事2

来源:互联网 发布:软件企业会计处理 编辑:程序博客网 时间:2024/05/18 03:12

贲神的故事2

时间限制(普通/Java) : 1000 MS/ 3000 MS          运行内存限制 : 65536 KByte
总提交 : 42            测试通过 : 10 

比赛描述

妹子:说你爱我!

贲神:不说!

妹子:快说你爱我!

贲神:不说!

…………

妹子:你快说嘛!

贲神:好吧好吧。watashilostvectoryou

贲神真的说了呦,不过妹子觉得很不爽,所以她想吧句子里面包含“love”的最短的字符串找出来(如果有多个的话找出最左边的),你能帮帮她么?



输入

第一行为一个正整数T表示有T组数据

每组数据有一行,为一个小写字母组成的字符串,长度不超过10000

输出

若可以找到“love”,则输出"l"最早出现的位置(默认第一个字符的位置为1),若找不到,则输出-1.

样例输入

1
watashilostvectoryou

样例输出

8

题目来源

张飞





/* Wrong Answer at Test 1#include<iostream>int main(){char a[10001];int t,i,j,strLen,pos,minLen=INT_MAX;bool flagO,flagV,flagE;scanf("%d",&t);while(t--){scanf("%s",a);}strLen = (int)strlen(a);for(i=0;i<strLen;i++){if(a[i]=='l'){flagO = flagV = flagE = 0;for(j=i+1; !flagE && j<strLen; j++){switch(a[j]){case('l'):break;case('o'):flagO = 1;break;case('v'):if(flagO){flagV = 1;}break;case('e'):if(flagV){flagE = 1;}break;default:break;}}if(flagE && minLen>j-i+1){minLen = j-i+1;pos = i+1;}}}if(minLen!=INT_MAX){printf("%d\n",pos);}else{printf("-1");}}*//* 31MS#include<iostream>int main(){char a[10001];int t,i,j,strLen,pos,minLen;bool flagO,flagV,flagE;scanf("%d",&t);while(t--){scanf("%s",a);minLen=INT_MAX;strLen = (int)strlen(a);for(i=0;i<strLen;i++){if(a[i]=='l'){flagO = flagV = flagE = 0;for(j=i+1; !flagE && j<strLen; j++){switch(a[j]){case('l'):break;case('o'):flagO = 1;break;case('v'):if(flagO){flagV = 1;}break;case('e'):if(flagV){flagE = 1;}break;default:break;}}if(flagE && minLen>j-i+1){minLen = j-i+1;pos = i+1;}}}if(minLen!=INT_MAX){printf("%d\n",pos);}else{printf("-1\n");}}}*/#include<iostream>int main(){char a[10001];int t,i,j,strLen,pos,minLen;bool flagO,flagV,flagE;scanf("%d",&t);while(t--){scanf("%s",a);minLen=INT_MAX;strLen = (int)strlen(a);for(i=0;i<strLen;i++){if(a[i]=='l'){flagO = flagV = flagE = 0;for(j=i+1; !flagE && j<strLen; j++){switch(a[j]){case('l'):if(!flagO){//这个剪枝将时间从31MS 降到了 0MSi = j;}break;case('o'):flagO = 1;break;case('v'):if(flagO){flagV = 1;}break;case('e'):if(flagV){flagE = 1;}break;default:break;}}if(flagE && minLen>j-i+1){minLen = j-i+1;pos = i+1;}}}if(minLen!=INT_MAX){printf("%d\n",pos);}else{printf("-1\n");}}}


0 0
原创粉丝点击