网易数据挖掘9.17 前两题ak代码

第一题,理解sql,意思是取参加两项活动以上的 按成绩降序名字升序排序输出
#include <bits/stdc++.h>
using namespace std;
bool isBigger(vector<string> a, vector<string> b) {
    int a_i = stoi(a[1]), b_i = stoi(b[1]);
    if (a_i != b_i) {
        return a_i > b_i;
    }
    else {
        return a[0] < b[0];
    }
}
int main() {
    int n(0), m(0);
    cin >> n >> m;
    cin.ignore();
    unordered_map<int, string> user;
    for (int i = 0; i != n; ++i) {
        string stemp;
        getline(cin, stemp);
        istringstream ss(stemp);
        int id(0), it(0);
        string user_name, sstemp;
        while (ss >> sstemp) {
            if (it == 0) {
                ++it;
                id = stoi(sstemp);
                continue;
            }
            if (it == 1) user_name = sstemp;
        }
        user.insert(pair<int, string>(id, user_name));
    }
    unordered_map<int, unordered_map<string, int>> activity_record;
    for (int i = 0; i != m; ++i) {
        string stemp;
        getline(cin, stemp);
        istringstream ss(stemp);
        int id(0),score(0), it(0);
        string activity_id, sstemp;
        while (ss >> sstemp) {
            if (it == 0) {
                ++it;
                id = stoi(sstemp);
                continue;
            }
            if (it == 1) {
                ++it;
                activity_id = sstemp;
                continue;
            }
            if (it == 2) {
                score = stoi(sstemp);
                continue;
            }
        }
        auto prec = activity_record.find(id);
        if (prec != activity_record.end()) {
            if (prec->second.find(activity_id) != prec->second.end()) {
                prec->second.find(activity_id)->second += score;
            }
            else {
                prec->second.insert(pair<string, int>(activity_id, score));
            }
        }
        else {
            unordered_map<string, int> mtemp;
            mtemp.insert(pair<string, int>(activity_id, score));
            activity_record.insert(pair<int, unordered_map<string, int>>(id, mtemp));
        }
    }
    vector<vector<string> > v_output;
    //map<string,int> output;
    for (auto it = activity_record.begin(); it != activity_record.end(); ++it) {
        auto msize = it->second.size();
        if (msize >= 2) {
            int totalscore(0);
            for (auto itt = it->second.begin(); itt != it->second.end();++itt) {
                totalscore += itt->second;
            }
            //output.insert(pair<string, int>(user.find(it->first)->second,totalscore));
            vector<string> vtemp = { user.find(it->first)->second ,to_string(totalscore) };
            v_output.push_back(vtemp);
        }
    }
    sort(v_output.begin(), v_output.end(), isBigger);
    for (int i = 0; i != v_output.size(); ++i) {
        cout << v_output[i][0] << " " << v_output[i][1] << endl;
    }
    return 0;
}
第二题,永结无间,两边各用一次dp
#include <bits/stdc++.h>
using namespace std;
int main() {
	int T(0);
	cin >> T;
	for (int iter = 0; iter != T; ++iter) {
		int N(0), M(0);
		cin >> N >> M;
		vector<int> height(N + 2, 0);
		for (int i = 1; i <= N; ++i) cin >> height[i];
		vector<vector<int> > dp(N + 2, vector<int>(2, 0));
		dp[M][1] = 1;
		for (int i = M + 1; i <= N; ++i) {
			for (int j = M; j != i; ++j) {
				dp[i][0] = max(dp[j][1], dp[i][0]);
				dp[i][0] = max(dp[j][0], dp[i][0]);
			}
			bool peak = false;
			int max_height(height[i]);
			for (int j = i - 1; j >= M; --j) {
				bool isInvisible = false;
				if (height[j] >= max_height) {
					if(height[j]> max_height) peak = true;
					max_height = height[j];
				}
				else {
					if (peak) isInvisible = true;
				}
				if (isInvisible) {
					if (dp[j][1] != 0) dp[i][1] = max(dp[i][1], dp[j][1] + 1);
				}
			}
		}
		for (int i = M - 1; i >= 1; --i) {
			for (int j = M; j != i; --j) {
				dp[i][0] = max(dp[j][1], dp[i][0]);
				dp[i][0] = max(dp[j][0], dp[i][0]);
			}
			bool peak = false;
			int max_height(height[i]);
			for (int j = i + 1; j <= M; ++j) {
				bool isInvisible = false;
				if (height[j] >= max_height) {
					if (height[j] > max_height) peak = true;
					max_height = height[j];
				}
				else {
					if (peak)    isInvisible = true;
				}
				if (isInvisible) {
					if(dp[j][1]!=0) dp[i][1] = max(dp[i][1], dp[j][1] + 1);
				}
			}
		}
		int max_ball = max(dp[N][1], dp[N][0]) + max(dp[1][1], dp[1][0]) - 2;
		cout << max_ball << endl;
	}
	return 0;
}
第三题,手写ann,挥手再见拜拜了您嘞,根本来不及写完全部过程,learning rate 部分都还没来得及写
using namespace std;
double sigmoid(double x) {
    return 1 / (1 + exp(-x));
}
double loss(double yhat, double y) {
    return (yhat - y) * yhat * (1 - yhat);
}
int main() {
    int d(0), q(0), l(0);
    cin >> d >> q >> l;
    int T(0);
    double eta(0.);
    cin >> T >> eta;
    int N(0);
    cin >> N;
    vector<vector<double> > V(q, vector<double>(d, 0));
    for (int i = 0; i != q; ++i) {
        for (int j = 0; j != d; ++j) {
            cin >> V[i][j];
        }
    }
    vector<vector<double> > W(l, vector<double>(q, 0));
    for (int i = 0; i != l; ++i) {
        for (int j = 0; j != q; ++j) {
            cin >> W[i][j];
        }
    }
    vector<vector<double> > data(N, vector<double>(d, 0));
    for (int i = 0; i != N; ++i) {
        for (int j = 0; j != d; ++j) {
            cin >> data[i][j];
        }
    }
    vector<vector<double> > target(N, vector<double>(l, 0));
    for (int i = 0; i != N; ++i) {
        for (int j = 0; j != l; ++j) {
            cin >> target[i][j];
        }
    }
    for (int iter = 0; iter != T; ++iter) {
        for (int iter_d = 0; iter_d != N; ++iter_d) {
            vector<double> middle_a(q, 0);
            for (int i = 0; i != q; ++i) {
                for (int j = 0; j != d; ++j) {
                    middle_a[i] += V[i][j] * data[iter_d][j];
                }
                middle_a[i] = sigmoid(middle_a[i]);
            }
            vector<double> middle_b(l, 0);
            for (int i = 0; i != l; ++i) {
                for (int j = 0; j != q; ++j) {
                    middle_b[i] += W[i][j] * middle_a[j];
                }
                middle_b[i] = sigmoid(middle_b[i]);
                if (i != l - 1) cout << fixed << setprecision(5) << middle_b[i] << " ";
                else cout << fixed << setprecision(5) << middle_b[i] << endl;
            }
            for (int i = 0; i != l; ++i) {
                middle_b[i] = middle_b[i] - eta * loss(target[iter_d][i], middle_b[i]) * middle_b[i];
            }
            for(int i=0;i!=l;++i){
                middle_b[i]= middle_b[i]-eta*loss(target[iter_d][i],middle_b[i])* middle_b[i];
            }
        }
    }
    return 0;
}




#网易##笔经##数据挖掘#
全部评论

相关推荐

广州金升阳 销售岗 9.5✖️12,包吃住,年终奖1到3
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务