网易互娱笔试3个编程题
1、四十米大刀
#include <iostream>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
bool compare(pair<int, int>& p1, pair<int, int>& p2)
{
if(p1.first == p2.first)
{
return p1.second < p2.second;
}
return p1.first < p2.first;
}
void getlength(vector<vector<int>>& vec, int m, int& l, int x, int y)
{
vector<pair<int, int>> res(m*m);
for(int i=0; i<m; i++)
{
for(int j=0; j<m; j++)
{
int key = (i-x)*(i-x)+(j-y)*(j-y);
res[i*m+j].first = key;
res[i*m+j].second = vec[i][j];
}
}
sort(res.begin(), res.end(), compare);
for(int i=0; i<res.size(); i++)
{
if(l*l >= res[i].first)
{
l += res[i].second;
}
else
{
break;
}
}
}
int main()
{
int t;
while(cin>>t)
{
while(t)
{
int m, l;
cin>>m>>l;
vector<vector<int> > vec(m, vector<int>(m));
for(int i=0; i<m; i++)
{
for(int j=0; j<m; j++)
{
cin>>vec[i][j];
}
}
int x, y;
cin>>x>>y;
getlength(vec, m, l, x, y);
cout<<l<<endl;
t--;
}
}
} - (1)如果x,y不在一个集合里,则将x和y所在的集合合并
- (2)如果x所在集合中除了x还有别的数字,则将x提出单独成立一个集合
- (3)输出x所在集合的元素个数
#include <iostream>
#include <vector>
#include <map>
using namespace std;
struct node
{
int value;
node* pre;
node* next;
node(int v):value(v), pre(nullptr), next(nullptr){};
};
int main()
{
int t;
while(cin>>t)
{
while(t)
{
int n, m;
cin>>n>>m;
map<int, node*> mymap;
for(int i=1; i<=n; i++)
{
node* tmp = new node(i);
tmp->pre = tmp;
tmp->next = tmp;
mymap[i] = tmp;
}
int op, x, y;
while(m)
{
cin>>op;
switch(op)
{
case 1:
{
cin>>x>>y;
node* temp = mymap[x]->next;
while(temp != mymap[x])
{
if(temp->value == mymap[y]->value)
{
break;
}
temp = temp->next;
}
if(temp == mymap[x])
{
node* prex = mymap[x]->pre;
node* prey = mymap[y]->pre;
prex->next = mymap[y];
mymap[y]->pre = prex;
prey->next = mymap[x];
mymap[x]->pre = prey;
}
break;
}
case 2:
{
cin>>x;
if(mymap[x]->next != mymap[x])
{
node* temp = mymap[x]->pre;
temp->next = mymap[x]->next;
mymap[x]->next->pre = temp;
mymap[x]->pre = mymap[x];
mymap[x]->next = mymap[x];
}
break;
}
case 3:
{
cin>>x;
node* temp = mymap[x]->next;
int res = 1;
while(temp != mymap[x])
{
res++;
temp = temp->next;
}
cout<<res<<endl;
break;
}
default:
break;
}
m--;
}
t--;
}
}
return 0;
} #include <iostream>
#include <vector>
using namespace std;
int main()
{
int t;
while(t)
{
int n;
cin>>n;
vector<int> vec1(n);
vector<int> vec2(n);
for(int i=0; i<n; i++)
{
cin>>vec1[i];
}
int min = 100;
int res = 0;
for(int i=0; i<n; i++)
{
cin>>vec2[i];
if(i%2 == 0 && vec2[i] < min)
{
min = vec2[i];
}
res += vec2[i];
}
if(n%2 == 1)
{
res += min;
}
cout<<res<<endl;
t--;
}
return 0;
} 
查看7道真题和解析