示例#1
0
vvb parse_obstacles(const vs &initial_map) {
  vvb obstacles(initial_map.size()+2, vector<bool>(initial_map[0].size()+2, true));
  for (int i = 0; i < initial_map.size(); i++) {
    for (int j = 0; j < initial_map[i].size(); j++) {
      obstacles[i+1][j+1] = (initial_map[i][j] == '*');
    }
  }
  return obstacles;
}
示例#2
0
void print(vs v){
  int n=v.size();
  for(int i=0;i<n; i++){
    cout<<v[i]<<endl;
  }
  cout<<n;
}
示例#3
0
文件: B.cpp 项目: lyoz/contest
void solve(vs names,vs towns)
{
	int n=names.size();
	vs res(n);
	map<string,int> f;
	rep(i,n){
		res[i]=shorten(names[i],towns[i]);
		f[res[i]]++;
	}
示例#4
0
pii find_king(const vs &initial_map) {
  for (int i = 0; i < initial_map.size(); i++) {
    for (int j = 0; j < initial_map[i].size(); j++) {
      if (initial_map[i][j] == 'X') {
        return make_pair(i+1, j+1);
      }
    }
  }
  // never reaches
}
示例#5
0
/*
* Returns an integer which is the index
* of a string in a vector of strings
*/
int returnIndexOfVector(vs &stringVector, string value)
{
	int iii;
	for (iii = 0; iii < stringVector.size(); iii++) {
		if (stringVector[iii] == value)	{
			return iii;
		}
	}
	return -1;
}
示例#6
0
文件: B.cpp 项目: lyoz/contest
string fill(vs ss)
{
	int p=ss.size();
	string res;
	for(int i=0;i/p<ss[i%p].size();i++){
		char c=ss[i%p][i/p];
		res+=c=='.'?'0':c;
	}
	return res;
}
示例#7
0
文件: E.cpp 项目: lyoz/contest
string solve_naive(vs ss)
{
	int k=ss.size(),n=ss[0].size();

	rep(i,k){
		string s=ss[0]; sort(all(s));
		string t=ss[i]; sort(all(t));
		if(s!=t)
			return "-1";
	}
void work(map<vi, int> & ans, vs & s)
{
	int n = s.size(), m = s[0].size();
	rep(x, t[m])
	{
		vi key(n);
		rep(i, n) rep(j, m)
			key[i] += x / t[j] % 10 + '0' == s[i][j];
		auto p = ans.find(key);
		if(p == ans.end()) ans[key] = x;
		else p->second = -1;
	}
int solve(int apos,int wpos,int k)
{
	if(apos==a.size() && wpos==w.size()-1 && k) return 1;
	if(apos==a.size() || wpos==w.size()) return 0;
	int& res=dp[apos][wpos][k];
	if(res!=-1) return res;
	res=0;
	for(int i=k;i<w[wpos].size();i++)
		if(a[apos]==w[wpos][i]) res+=solve(apos+1,wpos,i+1);
	if(k) res+=solve(apos,wpos+1,0);
	return res;
}
void printCase(vs V, vvs A, vd f){
    printf("Case Details:\n");
    printf("--------------\n");
    printf("Number Of Variables n: %d\n\n", V.size());
    printf("Rules:\n");
    printf("-------\n");
    for(int i=0; i<A.size(); i++){
        for(int j=0; j<A[i].size(); j++){
            printf("%s ", A[i][j].c_str());
        }
        printf(":: %.3lf\n", f[i]);
    }
}
示例#11
0
string makeMatch(vs namesWomen, vs answersWomen, vs namesMen, vs answersMen, string queryWoman)
{
	vp women;
	vp men;

	int size = namesWomen.size();

	for(int i = 0; i<size; i++)
	{
		women.push_back(ps(namesWomen[i], answersWomen[i]));
		men.push_back(ps(namesMen[i], answersMen[i]));
	}

	sort(women.begin(), women.end());
	sort(men.begin(), men.end());

	int compatible = 0;
	vp dates;

	for(vp::iterator it = women.begin(); it != women.end(); it++)
	{
		vp::iterator idealMale;
		string wAnswer = it->second;
		compatible = -1;

		for(vp::iterator mit = men.begin(); mit != men.end(); mit++)
		{
			string mAnswer = mit->second;
			int score = 0;
			for(int x = 0; x < wAnswer.length(); x++)
			{
				if(wAnswer[x] == mAnswer[x])
					score++;
			}

			if(score > compatible)
			{
				compatible = score;
				idealMale = mit;
			}
		}

		if(it->first == queryWoman)
			return idealMale->first;

		men.erase(idealMale);
	}

	string noMatch = "NO_MATCH";
	return noMatch;
}
示例#12
0
void find_openspaces(const vs &initial_map, pii *spaces) {
  int count = 0;
  for (int i = 0; i < initial_map.size(); i++) {
    for (int j = 0; j < initial_map[i].size(); j++) {
      if (initial_map[i][j] == '.') {
        spaces[count] = make_pair(i+1, j+1);
        count++;
        if (count == 2) {
          return;
        }
      }
    }
  }
}
示例#13
0
/*
* Outputs the predictions to file
* and returns the accuracy of the classification
*/
double printPredictionsAndCalculateAccuracy(vs &givenData, vs &predictions)
{
	ofstream outputFile;
	outputFile.open("decisionTreeOutput.txt");
	int correct = 0;
	outputFile << setw(3) << "#" << setw(16) << "Given Class" << setw(31) << right << "Predicted Class" << endl;
	outputFile << "--------------------------------------------------" << endl;
	for (int iii = 0; iii < givenData.size(); iii++) {
		outputFile << setw(3) << iii + 1 << setw(16) << givenData[iii];
		if (givenData[iii] == predictions[iii]) {
			correct++;
			outputFile << "  ------------  ";
		}
		else {
			outputFile << "  xxxxxxxxxxxx  ";
		}
		outputFile << predictions[iii] << endl;
	}
	outputFile << "--------------------------------------------------" << endl;
	outputFile << "Total number of instances in test data = " << givenData.size() << endl;
	outputFile << "Number of correctly predicted instances = " << correct << endl;
	outputFile.close();
	return (double)correct / 50 * 100;
}
示例#14
0
/*
 * function: naive_bayes::classification 对数据进行分类
 * return: 该数据最可能的目标属性值
 *
 */
std::string naive_bayes::classification(vs& data)
{
	assert((int)data.size() == num_attr - 1);
	// 为了防止溢出,以下对概率值取了对数
	int max_index = -1;
	double p_max = -1e300; // 最大概率
	vd p_targ_val; // 每个目标属性值对该数据的概率 P(data | target_attr[i])
	p_targ_val.resize(num_targ, 0.0);
	auto f = [&](double x, double u, double d)
	{// 求正态分布概率密度
		return std::exp(-(x - u) * (x - u) / (2 * d)) / sqrt(4 * std::acos(-1) * d);
	};
	for(int i = 0; i < num_targ; ++i)
	{
		auto& t = p_targ_val[i];
		t = std::log(p_target[i]); // 取对数
		for(int j = 0; j < num_attr - 1; ++j)
		{
			auto& p = p_datas[i][j];
			if(is_numeric[j])
			{
				t += std::log(f(std::stod(data[j]), p.mean_value, p.variance));
			}
			else
			{
				auto it = attr_to_int[j].find(data[j]);
				if(it == attr_to_int[j].end())
				{
					std::cerr<<"No such attribute value."<<std::endl;
					exit(1);
				}
				t += std::log(p.p_attr[it->second]);
			}
		}
	}
	// 找到最大概率值
	for(int i = 0; i < num_targ; ++i)
	{
//		std::cout<<p_targ_val[i]<<std::endl;
		if(p_max < p_targ_val[i])
			p_max = p_targ_val[i], max_index = i;
	}
	return int_to_attr[num_attr - 1][max_index];
}
示例#15
0
        int shortestLadder(vector <string> level, int coinRow, int coinColumn){ 
            M = level;
            n = M.size();
            m = M[0].size();
            vi move(2);
            move[0] = -1; move[1] = 1;

            for(int l = 0; l < n; l++){
                // cout<<"level = "<<l<<endl;
                fi(n) fj(m) visited[i][j] = 0;
                queue<pi> Q;
                Q.push(mp(n-1, m-1));
                visited[n-1][m-1] = 1;
                while(!Q.empty()){
                    pi p = Q.front();
                    Q.pop();
                    int x = p.first, y = p.second;
                    // cout<<x<<" "<<y<<endl;
                    if(x+1 == coinRow && y+1 == coinColumn) return l;
                    //Move horizontally
                    for(int k : move){
                        if(valid(x, y+k)){
                         Q.push(mp(x, y+k));
                         visited[x][y+k] = 1;
                        }
                    }
                    //Move vertically
                    for(int i = 1; i <= l; i++){
                        for(int k : move){
                            if(valid(x+k*i, y)){
                             visited[x+k*i][y] = 1;
                             Q.push(mp(x+k*i, y));
                            }
                        }
                    }
                }
            }
        } 
示例#16
0
void print(vs tmp) {
    for (int i = 0; i < tmp.size(); ++i)
        cout << "\"" << tmp[i] << "\"" << endl;
}
double recur(vs V, vvs A, vd f){
    //printCase(V, A, f);
    if(V.size()==1) return f[0];

    string var = V[0];

    int val;
    for(int i=0; i<A.size(); i++){
        if(A[i].size()>1) continue;
        if(var==A[i][0]) {
            val = f[i];
            break;
        }
    }

    vs Vij = V;
    vvs Aij(A.size(), vs());

    //step 1
    Vij.erase(Vij.begin());
    //step 2
    for(int i=0; i<A.size(); i++){
        for(int j=0; j<A[i].size(); j++){
            if(var!=A[i][j]) Aij[i].push_back(A[i][j]);
        }
    }

    // remove empty rules
    for(int i=0; i<Aij.size(); i++){
        if(Aij[i].size()==0){
            Aij.erase(Aij.begin()+i);
            i--;
        }
    }

    // remove repeated rules
    set<vs> s(Aij.begin(), Aij.end());
    Aij.clear();
    Aij = vvs(s.begin(), s.end());

    // construct DAG
    vector<vi> graph(Aij.size(), vi());
    vector<vi> graphT(Aij.size(), vi());

    for(int i=0; i<Aij.size(); i++){
        for(int j=0; j<Aij.size(); j++){
            if(i==j||Aij[i].size()>=Aij[j].size()) continue;
            bool subset=1;
            for(int k=0; k<Aij[i].size()&&subset; k++){
                bool found=0;
                for(int l=0; l<Aij[j].size(); l++){
                    if(Aij[i][k]==Aij[j][l]){
                        found=1;
                        break;
                    }
                }
                subset&=found;
            }
            if(subset){
                graph[i].push_back(j);
                graphT[j].push_back(i);
            }
        }
    }

    // Try for all values of the number of instances of the cur variable
    double maxValue=0;
    while(val>0){
        vd fij(Aij.size(), INF);

        for(int i=0; i<Aij.size(); i++){
            vs S = Aij[i];
            vs Sv = S;
            Sv.push_back(var);
            bool foundS=false, foundSv=false;
            double foundSval, foundSvVal;

            for(int j=0; j<A.size(); j++){
                if(S.size()==A[j].size()){
                    bool sameSet=1;
                    for(int k=0; k<S.size()&&sameSet; k++){
                        bool found=0;
                        for(int l=0; l<S.size(); l++){
                            if(S[k]==A[j][l]) {
                                found = 1;
                                break;
                            }
                        }
                        sameSet&=found;
                    }
                    if(sameSet) foundS=true, foundSval=f[j];
                }
                if(Sv.size()==A[j].size()){
                    bool sameSet=1;
                    for(int k=0; k<Sv.size()&&sameSet; k++){
                        bool found=0;
                        for(int l=0; l<Sv.size(); l++){
                            if(Sv[k]==A[j][l]) {
                                found = 1;
                                break;
                            }
                        }
                        sameSet&=found;
                    }
                    if(sameSet) foundSv=true, foundSvVal=f[j]/val;
                }
            }
            if(!foundSv) fij[i]=foundSval;
            else if(!foundS) fij[i]=foundSvVal;
            else fij[i]=min(foundSval,foundSvVal);
        }

        queue<int> q;
        for(int i=0; i<Aij.size(); i++){
            if(graph[i].size()==0) q.push(i);
        }
        while(!q.empty()){
            int node = q.front(); q.pop();
            for(int i=0; i<graph[node].size(); i++){
                fij[node]=min(fij[node], fij[graph[node][i]]);
            }
            for(int i=0; i<graphT[node].size(); i++){
                q.push(graphT[node][i]);
            }
        }

        maxValue=max(maxValue, val*recur(Vij, Aij, fij));
        val--;
    }

    return maxValue;
}
示例#18
0
文件: C.cpp 项目: lyoz/contest
template<typename Ch,typename Tr,typename C>
basic_ostream<Ch,Tr>& operator<<(basic_ostream<Ch,Tr>& os,const C& c){
	os<<'[';
	for(auto i=begin(c);i!=end(c);++i)
		os<<(i==begin(c)?"":" ")<<*i;
	return os<<']';
}

constexpr int INF=1e9;
constexpr int MOD=1e9+7;
constexpr double EPS=1e-9;

int calc(vs ops,vi xs,int a)
{
	rep(i,ops.size()){
		if(ops[i]=="&") a&=xs[i];
		if(ops[i]=="^") a^=xs[i];
		if(ops[i]=="|") a|=xs[i];
	}
	return a;
}

int main()
{
	#ifndef _GLIBCXX_DEBUG
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr);
	constexpr char endl='\n';
	#endif