[csp-201403-3]命令行选项

[csp-201403-3]命令行选项

 

 1 #include<bits/stdc++.h>
 2 //#include <sstream>  // if want to use stringstream
 3 using namespace std;
 4 
 5 const int N=310;
 6 
 7 struct node{
 8     string c;
 9     bool has_c,can_has_c,bk,vis;
10 }a[N];
11 string s,c;
12 int sl;
13 
14 void init()
15 {
16     getline(cin,s);
17     sl=s.size();
18     for(int i=1;i<=26;i++) a[i].bk=0,a[i].vis=0,a[i].can_has_c=0,a[i].has_c=0;
19     for(int i=0;i<sl;i++)
20     {
21         int now=s[i]-'a'+1;
22         a[now].bk=1;
23         a[now].can_has_c=0;
24         if(i+1<sl && s[i+1]==':') 
25         {
26             i++;
27             a[now].can_has_c=1;
28         }
29     }
30 }
31 
32 void getnext()
33 {
34     c="";
35     while(sl<s.size())
36     {
37         if(s[sl]==' ' || s[sl]=='\n') {sl++;break;}
38         c+=s[sl];sl++;
39         //if(!((s[sl]>='a' && s[sl]<='z') || (s[sl]>='0' && s[sl]<='9') || s[sl]=='-')) {sl++;break;}
40     }
41 }
42 
43 void solve()
44 {
45     for(int i=1;i<=26;i++) a[i].has_c=0,a[i].vis=0;
46     sl=0;
47     getline(cin,s);
48     getnext();
49     while(1)
50     {
51         getnext();
52         if(c.size()==0) return;
53         if(c[0]=='-')
54         {
55             int now=c[1]-'a'+1;
56             if(!a[now].bk) return;
57             a[now].vis=1;
58             if(a[now].can_has_c)
59             {
60                 getnext();
61                 if(c.size()==0) 
62                 {
63                     if(!a[now].has_c) a[now].vis=0;
64                     return ;
65                 }
66                 a[now].has_c=1;
67                 a[now].c=c;
68             }
69         }
70         else return ;
71     }
72 }
73 
74 void output()
75 {
76     for(int i=1;i<=26;i++)
77     {
78         if(a[i].vis) printf(" -%c",i-1+'a');
79         if(a[i].has_c) cout << ' ' << a[i].c;
80     }
81     cout << endl;
82 }
83 
84 int main()
85 {
86     //freopen("a.in","r",stdin);
87     init();
88     int T;
89     scanf("%d",&T);getline(cin,s);
90     for(int TT=1;TT<=T;TT++)
91     {
92         printf("Case %d:",TT);
93         solve();
94         output();
95     }
96     return 0;
97 }

 

posted @ 2018-12-12 20:36 拦路雨偏似雪花 阅读( ...) 评论( ...) 编辑 收藏
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值