SRM 581 DIV1 Easy - SurveillanceSystem

問題


http://community.topcoder.com/stat?c=problem_statement&pm=12588&rd=15501

解き方


監視してる数ごとに、どのような場合が成り立つか考える。

その監視している数について、成り立つすべての場合をall、カメラの数をcntとすると
all-cnt以上その場合の数が存在した時は必ず+となり、1位上であれば?となる。

コード


class SurveillanceSystem {

public: string getContainerInfo(string containers, vector<int> reports, int L) {
int n=containers.size();
string ret="";
FORE(i,0,n)ret+='-';

int p[n];
for(int i=0;i<=n;i++){
int cnt=0;
FORE(j,0,reports.size())if(reports[j]==i)cnt++;
if(cnt==0)continue;

int all=0;
memset(p,0,sizeof(p));
for(int j=0;j+L-1<n;j++){
int tmp=0;
FORE(k,0,L)if(containers[j+k]=='X')tmp++;

if(tmp==i){
all++;
FORE(k,0,L)p[j+k]++;
}
}

FORE(j,0,n){
if(p[j]==0)continue;
if(cnt>all-p[j])ret[j]='+';
else if(ret[j]=='-')ret[j]='?';
}
}

return ret;
}

};

Share this

Related Posts

Previous
Next Post »