[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 }
相關文章
相關標籤/搜索