http://ac.jobdu.com/problem.php?pid=1082
因为每个proxy都可以用多次,所以使用贪心算法,局部最优迭代得到全局最优。
#include <stdio.h>
#include <cstring>
int main(){
//freopen("in/1082.in","r",stdin);
char proxy[1002][16];
char server[5002][16];
int nProxy,nServer;
while(scanf("%d",&nProxy) !=EOF ){
for (int i = 0; i < nProxy; ++i) {
scanf("%s",proxy[i]);
}
scanf("%d",&nServer);
for (int i = 0; i < nServer; ++i) {
scanf("%s",server[i]);
}
int cur = 0;
int switchs = 0;
bool isOK = false;
while(cur<nServer){
int maxStep = cur;
int k;
//find maxStep
for (int i = 0; i < nProxy; ++i) {
for (k = cur; k<nServer ; k++) {
if(strcmp(server[k],proxy[i]) == 0) {
//reach the farthest
if(k > maxStep){
maxStep = k;
}
break;
}
}
if(k==nServer){
isOK = true;
break;
}
}//end of maxStep
if(isOK) break;
if(cur == maxStep){
break;
}
cur = maxStep;
switchs++;
}
if(isOK) printf("%d\n",switchs);
else printf("-1\n");
}
}