【高频考点】模拟
·
2025年9月17日 大模型Attention模块开发(通过率100%)
#include<iostream>
#include<vector>
#include<cmath>
using namespace std;
vector<vector<double>> compute_matrix(vector<vector<double>> X, vector<vector<double>> W){
int n=X.size();
int m=X[0].size();
int h=W[0].size();
vector<vector<double>> Q(n, vector<double>(h));
for(int i=0;i<n;i++){
for(int j=0;j<h;j++){
double sum=0;
for(int k=0;k<m;k++){
sum+=X[i][k]*W[k][j];
}
Q[i][j]=sum;
}
}
return Q;
}
vector<vector<double>> compute_T(vector<vector<double>> X){
int n=X.size();
int m=X[0].size();
vector<vector<double>> R(m,vector<double>(n));
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
R[i][j]=X[j][i];
}
}
return R;
}
vector<vector<double>> compute_softmax(vector<vector<double>> X){
int n=X.size();
int m=X[0].size();
vector<double> mi(m);
for(int j=0;j<m;j++){
double sum=0;
for(int i=0;i<n;i++){
sum+=X[i][j];
}
mi[j]=sum;
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
X[i][j]=X[i][j]/mi[j];
}
}
return X;
}
vector<vector<double>> matrix_div(vector<vector<double>> X,double a){
int n=X.size();
int m=X[0].size();
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
X[i][j]=X[i][j]/a;
}
}
return X;
}
int main(){
int n,m,h;
cin>>n>>m>>h;
vector<vector<double>> X(n, vector<double>(m,1));
vector<vector<double>> W(m, vector<double>(h,0));
for(int i=0;i<m;i++){
for(int j=i;j<h;j++){
W[i][j]=1;
}
}
vector<vector<double>> Q(n, vector<double>(h));
Q=compute_matrix(X,W);
vector<vector<double>> K=Q;
vector<vector<double>> V=Q;
vector<vector<double>> Y(n, vector<double>(h));
Y=compute_matrix(compute_softmax(matrix_div(compute_matrix(Q,compute_T(K)),sqrt(h))), V);
double result=0;
for(int i=0;i<n;i++){
for(int j=0;j<h;j++){
result+=Y[i][j];
}
}
cout<<round(result)<<endl;
return 0;
}
2025年9月3日 大模型训练MOE场景路由优化算法(通过率100%)
#include<iostream>
#include<unordered_map>
#include<vector>
#include<algorithm>
using namespace std;
struct sample{
int idx;
int group;
double pro;
};
bool m_n(sample a, sample b){
if(a.pro==b.pro) return a.idx<b.idx;
return a.pro>b.pro;
}
int main(){
int n,m,p,k;
cin>>n>>m>>p>>k;
vector<double> pr(n);
for(int i=0;i<n;i++){
cin>>pr[i];
}
int a=n/m;
if(n%m!=0||m<p||a*p<k) cout<<"error"<<endl;
else{
vector<sample> map;
int group=0;
for(int i=0;i<n;i=i+a){
double b=pr[i];
int idx=i;
for(int j=i+1;j<i+a;j++){
if(b<pr[j]){
b=pr[j];
idx=j;
}
}
map.push_back({idx,group,b});
group++;
}
sort(map.begin(),map.end(),m_n);
vector<int> map2;
for(int i=0;i<p;i++){
map2.push_back(map[i].group);
}
vector<sample> map3;//用push_back就不要初始化大小
for(int i=0;i<p;i++){
int group=map2[i];
for(int j=group*a;j<group*a+a;j++){
map3.push_back({j,group,pr[j]});
}
}
sort(map3.begin(),map3.end(),m_n);
vector<int> map4;
for(int i=0;i<k;i++){
map4.push_back(map3[i].idx);
}
sort(map4.begin(),map4.end());
for(int i=0;i<k;i++){
if(i<k-1)
cout<<map4[i]<<" ";
else
cout<<map4[i]<<endl;
}
}
return 0;
}
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)