1 solutions
-
0
上古时期的T3确实好写一些,按照题意模拟即可,需要注意的是题目中选项参数字符串的定义为小写字母、数字和减号。
同时需要注意的是,选项的参数开头也可以是减号,可以参考这个例子:
a:bc:d 1 ls -a -a -a -b -b Case 1: -a -b -b
(鄙人陋习,竞赛代码不空格) 代码如下:
#include<bits/stdc++.h> using namespace std; char s[1010],c[1010],w[1010]; char a[30][1010]; bool ex[30]; int type[30]; int n,len; inline int islegal(char c) { return isdigit(c)||islower(c)||c=='-'; } int main() { scanf("%s",c+1);len=strlen(c+1); for(int i=1;i<=len;i++) { if(isalpha(c[i])) { type[c[i]-'a']=1; if(i+1<=len&&c[i+1]==':') type[c[i]-'a']=2; } } scanf("%d ",&n); int cnt=0; while(n--) { fgets(s,1010,stdin);len=strlen(s); int p=0; while(p<len&&s[p]!=' ') p++; for(int i=0;i<26;i++) ex[i]=0; while(p<len&&s[p]!='\n') { //确定是选项 if(p+1<len&&s[p]=='-'&&isalpha(s[p+1])) { int op=s[p+1]-'a'; if(!type[op]) break; //选项-a后不能有其他非空字符 if(islegal(s[p+2])) break; p+=2; if(type[op]==1) { ex[op]=1; } else { int idx=0; while(p<len&&!islegal(s[p])) p++; if(p>=len||!islegal(s[p])) break; ex[op]=1; while(p<len&&islegal(s[p])) a[op][idx++]=s[p++]; a[op][idx]='\0'; } } else { if(s[p]!=' ') break; p++; } } printf("Case %d: ",++cnt); for(int i=0;i<26;i++) { if(!ex[i]) continue; printf("-%c ",i+'a'); if(type[i]==2) { printf("%s ",a[i]); } } puts(""); } return 0; }
- 1
Information
- ID
- 5
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 2
- Tags
- # Submissions
- 9
- Accepted
- 5
- Uploaded By