2011TCO Qual Round A

第一场资格赛,大牛都没参加。。。

250pts

#include <vector> #include <list> #include <map> #include <set> #include <deque> #include <stack> #include <bitset> #include <string> #include <functional> #include <numeric> #include <utility> #include <sstream> #include <iostream> #include <iomanip> #include <cstdio> #include <cmath> #include <cstdlib> #include <ctime> #include <algorithm> using namespace std; class MinimumLiars { public: int getMinimum(vector <int> claim) { int n=claim.size(); int i; int ret = -1; int k; int tmp; for(k=0;k<=n;k++){ tmp=0; for(i=0;i<n;i++) if(claim[i]>k) tmp++; if(tmp==k) break; } if(k<=n) ret=k; return ret; } }; 

500pts

#include <vector> #include <list> #include <map> #include <set> #include <deque> #include <stack> #include <bitset> #include <string> #include <functional> #include <numeric> #include <utility> #include <sstream> #include <iostream> #include <iomanip> #include <cstdio> #include <cmath> #include <cstdlib> #include <ctime> #include <algorithm> using namespace std; #define MAXN 80002 double dp[MAXN]; class FoxListeningToMusic { public: vector<double> getProbabilities(vector <int> len, int T) { int n=len.size(); dp[0]=1.0; int i,j; double p=1.0/(n*1.0); for(i=1;i<=T;i++){ dp[i]=0; for(j=0;j<n;j++) if(i>=len[j]) dp[i]+=dp[i-len[j]]*p; } vector<double> ret; double tmp; for(i=0;i<n;i++){ tmp=0; if(len[i]>T) j=0; else j=(T+1)-len[i]; for(;j<=T;j++){ tmp+=dp[j]*p; } ret.push_back(tmp); } return ret; } }; 

1000pts,代码能力实在太差,许多trick都没有发现

#include <vector> #include <list> #include <map> #include <set> #include <deque> #include <stack> #include <bitset> #include <string> #include <functional> #include <numeric> #include <utility> #include <sstream> #include <iostream> #include <iomanip> #include <cstdio> #include <cmath> #include <cstdlib> #include <ctime> #include <algorithm> using namespace std; char op[2]={'B','W'}; string insert(string pat,string r){ int i; int len=pat.length(); string ret=""; for(i=0;pat[i]!='?';i++) ret+=pat[i]; ret+=r; for(i+=2;i<len;i++) ret+=pat[i]; int tmp=1; for(i=1;i<ret.length();i++){ if(ret[i]!=ret[i-1]) tmp++; else tmp--; if(tmp==0) return "..."; } return ret; } string generate(char start,char end,int num,int pre){ int i; int tmp; string ret=""; if(num<0){ if(end!=start){ tmp=0; for(i=1;i<=-num;i++) ret+=op[tmp]; if(start=='B'){ if(pre+num==1){ tmp=(tmp+1)%2; ret+=op[tmp]; ret+=op[tmp]; } else{ ret+=op[tmp]; tmp=(tmp+1)%2; ret+=op[tmp]; } } else ret+="BB"; } else{ if(start=='B') tmp=0; else tmp=1; for(i=1;i<=-num;i++) ret+=op[tmp]; } return ret; } if(start=='W'&&end=='W'){ if(num==0) return "BBWW"; if(num&1){ ret+="BB"; tmp=1; for(i=1;i<=num;i++){ ret+=op[tmp]; tmp=(tmp+1)%2; } return ret; } else{ tmp=0; for(i=1;i<=num;i++){ ret+=op[tmp]; tmp=(tmp+1)%2; } return ret; } } if(start=='W'&&end=='B'){ if(num==0) return "BB"; if(num&1){ tmp=0; for(i=1;i<=num;i++){ ret+=op[tmp]; tmp=(tmp+1)%2; } return ret; } else{ ret+="BB"; tmp=1; for(i=1;i<=num;i++){ ret+=op[tmp]; tmp=(tmp+1)%2; } return ret; } } if(start=='B'&&end=='B'){ if(num==0){ if(pre>2) return "BBWB"; if(pre==2) return "BWBB"; return "WWBB"; } if(num&1){ if(pre>1){ ret+="BW"; tmp=0; for(i=1;i<=num;i++){ ret+=op[tmp]; tmp=(tmp+1)%2; } return ret; } else{ ret+="WBB"; tmp=1; for(i=1;i<num;i++){ ret+=op[tmp]; tmp=(tmp+1)%2; } return ret; } } else{ tmp=1; for(i=1;i<=num;i++){ ret+=op[tmp]; tmp=(tmp+1)%2; } return ret; } } if(start=='B'&&end=='W'){ if(num==0) return "WW"; if(num&1){ tmp=1; for(i=1;i<=num;i++){ ret+=op[tmp]; tmp=(tmp+1)%2; } return ret; } else{ if(pre>1){ ret+="BW"; tmp=0; for(i=1;i<=num;i++){ ret+=op[tmp]; tmp=(tmp+1)%2; } return ret; } else{ ret+="WBB"; tmp=1; for(i=1;i<num;i++){ ret+=op[tmp]; tmp=(tmp+1)%2; } return ret; } } } } class SquareSeries { public: string completeIt(string pat, int lastLength) { int len = pat.length(); int i; int num=0; for(i=0;pat[i]!='?';i++){ if(i==0) {continue;} if(pat[i]!=pat[i-1]) num++; else num--; if(num<0) return "..."; } int minus=0; int ind=i; for(i+=2;i<len;i++){ if(pat[i]!=pat[i-1]) minus++; else minus--; } int res; res=lastLength-1-minus-num; string ret=""; int tmp; if(ind==0){ if(ind==len-1){ tmp=0; for(i=1;i<=res+1;i++){ ret+=op[tmp]; tmp=(tmp+1)%2; } return ret; } else{ if(res<0) return "..."; ret+=pat[ind+1]; if(pat[ind+1]=='B') tmp=1; else tmp=0; for(i=1;i<=res;i++){ ret+=op[tmp]; tmp=(tmp+1)%2; } reverse(ret.begin(),ret.end()); return insert(pat,ret); } } if(ind==len-1){ if(ind==0){ tmp=0; for(i=1;i<=res+1;i++){ ret+=op[tmp]; tmp=(tmp+1)%2; } return ret; } else{ if(res<0){ if(pat[ind-1]=='B') tmp=0; else tmp=1; for(i=1;i<=-res;i++) ret+=op[tmp]; return insert(pat,ret); } if(pat[ind-1]=='B'){ tmp=1; for(i=1;i<=res;i++){ ret+=op[tmp]; tmp=(tmp+1)%2; } return insert(pat,ret); } else{ tmp=0; for(i=1;i<=res;i++){ ret+=op[tmp]; tmp=(tmp+1)%2; } return insert(pat,ret); } } } else{ tmp=1+num+res; for(i=ind+2;i<len;i++){ if(pat[i]!=pat[i-1]) tmp++; else tmp--; if(tmp==0) return "..."; } ret=generate(pat[ind-1],pat[ind+1],res,num+1); tmp=1+num; return insert(pat,ret); } } }; 

 

你可能感兴趣的:(String,vector,Class,ini,insert)