题解 P4432 【[COCI2017-2018#2] ​​ZigZag】

引领天下

2018-12-05 21:33:59

Solution

没有C++题解?我来一发 这题目实际上可以用C++vector轻松解决 具体代码里说吧 ```cpp // luogu-judger-enable-o2 #include <bits/stdc++.h> #include <vector> using namespace std; int n,k,q[30];//q为以a开头的单词中应该选的序号 vector <string> a[30];//建立一个以首字母序号为索引的vector char c; int main(){ scanf("%d%d",&k,&n); while(k--){ string s; cin>>s; a[s[0]-'a'].push_back(s);//vector的基本用法 } for (int i=0;i<26;i++)sort(a[i].begin(),a[i].end());//C++对string的排序默认按字典序 while (n--){ cin>>c; cout<<a[c-'a'][q[c-'a']]<<endl; q[c-'a']=(q[c-'a']+1)%a[c-'a'].size();//+1指向下一个,同时取模 //经观察可发现: //单词:zadar zoo //次数:0 0 //第一次选zadar: // zadar zoo // 1 0 //则第二次选zoo: // zadar zoo // 1 1 //第三次又选zadar: // zadar zoo // 2 1 //… //则可以发现:无论有多少次,在同一字母开头的单词中下标一直单调递增 //所以直接+1就可以啦。 } } ``` 注:本题只有一个Pascal的解法,我不知我的C++vector解法哪里重复了,麻烦管理员拒绝时给个明确的理由,谢谢