牛客编程巅峰赛S1第6场 - 黄金&钻石&王者 (解题报告)
程序员文章站
2024-01-19 09:37:04
题目链接:https://ac.nowcoder.com/acm/contest/6629A-牛牛爱奇数题意:有n个数,既有奇数又有偶数,可以选中一种偶数,将其变成原来的一半,比如选中2然后可以把序列中所有的2变成1,最少经过多少次操作,才能使得序列中都是奇数?hint:由于可以对所有选中的偶数进行操作,因此可以直接用map标记偶数是否被选中过,如果没有的话cnt++。AC代码:class Solution {public: /** * ......
题目链接:https://ac.nowcoder.com/acm/contest/6629
A-牛牛爱奇数
题意:有n个数,既有奇数又有偶数,可以选中一种偶数,将其变成原来的一半,比如选中2然后可以把序列中所有的2变成1 ,最少经过多少次操作,才能使得序列中都是奇数?
hint:由于可以对所有选中的偶数进行操作,因此可以直接用map标记偶数是否被选中过 ,如果没有的话cnt++。
AC代码:
class Solution {
public:
/**
* 返回一个数,代表让这些数都变成奇数的最少的操作次数
* @param n int整型 代表一共有多少数
* @param a int整型vector 代表n个数字的值
* @return int整型
*/
map<int,int>vis;
vector<int>v;
int solve(int n, vector<int>& a) {
// write code here
for(auto i:a){
if(i%2==0){
if(!vis[i]){
vis[i]=1;
v.push_back(i);
}
}
}
int cnt=0;
if(v.size()==0)return cnt;
for(auto i:v){
int t=i;
while(t%2==0){
if(vis[t]==2)break;
vis[t]=2;
cnt++;
t/=2;
}
}
return cnt;
}
};
B-牛牛摆放花
题意:n朵花摆放成圆形,丑陋度是相邻高度差最大值,求丑陋度最小值
hint:构造题。
先sort排序,然后依次放于首尾,求出的丑陋度最小。
AC代码:
class Solution {
public:
/**
* 返回按照这些花排成一个圆的序列中最小的“丑陋度”
* @param n int整型 花的数量
* @param array int整型vector 花的高度数组
* @return int整型
*/
int solve(int n, vector<int>& array) {
// write code here
sort(array.begin(),array.end());
vector<int>a(n,0);
int cnt=0;
for(int i=0;i<n/2;i++){
a[i]=array[cnt++];
a[n-1-i]=array[cnt++];
}
if(n&1)a[n/2]=array[cnt];
int mx=abs(a[0]-a[n-1]);
for(int i=1;i<n;i++)mx=max(mx,abs(a[i]-a[i-1]));
return mx;
}
};
C-星球游戏
题意:牛牛占据p个星球,牛妹占据q个星球,求两个集合间的最短距离。
hint:bfs更新从牛牛星球开始走的最短距离dis,牛妹星球dis中最短的既是答案。
AC代码:
class Solution {
public:
/**
*
* @param niuniu int整型vector 牛牛占领的p个星球的编号
* @param niumei int整型vector 牛妹占领的q个星球的编号
* @param path int整型vector<vector<>> m条隧道,每条隧道有三个数分别是ui,vi,wi。ui,vi分别是隧道的两边星球的编号,wi是它们之间的距离
* @param nn int整型 星球个数n
* @return int整型
*/
int dis[234567],vis[234567];
const int inf = 0x3f3f3f3f;
struct node{
int u,cost;
};
vector<node>v[234567];
int Length(vector<int>& niuniu, vector<int>& niumei, vector<vector<int> >& path, int nn) {
// write code here
memset(dis,inf,sizeof(dis));
memset(vis,0,sizeof(vis));
for(auto i:path){
v[i[0]].push_back({i[1],i[2]});
v[i[1]].push_back({i[0],i[2]});
}
queue<int>q;
for(auto niu:niuniu){//可以将所有的niuniu都进队列,同步操作
dis[niu]=0;
q.push(niu);
}
while(q.size()){
int t=q.front();q.pop();
if(vis[t])continue;
vis[t]=1;
for(auto i:v[t]){
if(dis[i.u]+i.cost<dis[t])dis[t]=dis[i.u]+i.cost;
q.push(i.u);
}
}
int mx=inf;
for(auto mei:niumei){
mx=min(mx,dis[mei]);
}
if(mx==inf)return -1;
return mx;
}
};
本文地址:https://blog.csdn.net/weixin_43911947/article/details/107590446
上一篇: Python特性--迭代