牛客编程巅峰赛S1第6场 - 青铜&白银 A.字符串 B.stl C.stl

链接:https://ac.nowcoder.com/acm/contest/6490/A
来源:牛客网

题目描述
牛牛有一个二进制数的字符串,他想把字符串循环右移k位,然后得到一个新的二进制数,你能告诉牛牛这个数的十进制值是多少吗。给定一个二进制字符串str和循环位移位数k,返回循环后的二进制数的十进制值。

示例1
输入
复制
“10110”,2
输出
复制
21
说明
新二进制串为“10101”,十进制值为21
备注:
1\leq|str|\leq 63,1\leq k\leq|str|1≤∣str∣≤63,1≤k≤∣str∣

class Solution {
public:
    /**
     * 位移后二进制串的十进制值
     * @param str string字符串 二进制字符串
     * @param k int整型 循环位移次数
     * @return long长整型
     */
    long long rotateRight(string str, int k) {
        // write code here
        long long n=str.size();
      long long ans=0;
        for(int i=n-k;i<n;i++){
            ans=ans*2+(str[i]-'0');
        }
        for(int i=0;i<n-k;i++){
            ans=ans*2+(str[i]-'0');
        }
        return ans;
            
        
    }
};

链接:https://ac.nowcoder.com/acm/contest/6490/B
来源:牛客网

题目描述
在牛牛面前放着nn个数,这些数字既有奇数也有偶数,只不过牛牛对奇数情有独钟,他特别想让这些数都变成奇数。
现在牛牛获得了一种能力,他可以执行一种操作:每次选中一个偶数,然后把这些数中与该数相等的数都除以2,例如现在有一个数组为[2,2,3][2,2,3],那么牛牛可以执行一次操作,使得这个数组变为[1,1,3][1,1,3]。
牛牛现在想知道,对于任意的nn个数,他最少需要操作多少次,使得这些数都变成奇数?
示例1
输入
复制
3,[2,2,3]
输出
复制
1
说明
只需做一次操作,会将其中的偶数2都变成1,满足了所有的数都是奇数的要求。
示例2
输入
复制
3,[1,3,7]
输出
复制
0
说明
不需要做任何操作,因为所有的数原本就是奇数。
备注:
1 \leq n \leq 10^{6},代表一个有多少数字1≤n≤10
6
,代表一个有多少数字
a_{1},a_{2},a_{3}…a_{n}(1 \leq a_{i} \leq 10^{9})代表数字的大小a
1

,a
2

,a
3

…a
n

(1≤a
i

≤10
9
)代表数字的大小
对于25%的数据,1 \leq n \leq 10^{2},1 \leq a_{i} \leq 10^{3}对于25%的数据,1≤n≤10
2
,1≤a
i

≤10
3

对于75%的数据,1 \leq n \leq 10^{4},1 \leq a_{i} \leq 10^{6}对于75%的数据,1≤n≤10
4
,1≤a
i

≤10
6

对于100%的数据,1 \leq n \leq 10^{6},1 \leq a_{i} \leq 10^{9}对于100%的数据,1≤n≤10
6
,1≤a
i

≤10
9

class Solution {
public:
    /**
     * 返回一个数,代表让这些数都变成奇数的最少的操作次数
     * @param n int整型 代表一共有多少数
     * @param a int整型vector 代表n个数字的值
     * @return int整型
     */
   
    set<int>s;
    int solve(int n, vector<int>& a) {
        // write code here
       for(int i=0;i<n;i++){
           if(a[i]%2==0){
               s.insert(a[i]);
           }
       }
       int ans=0;
     while(s.size()){
       int t=*s.rbegin();
         ans++;
         s.erase(s.find(t));
         t>>=1;
         if((t&1)==0)s.insert(t);
     }
        return ans;
    }
 
};

链接:https://ac.nowcoder.com/acm/contest/6490/C
来源:牛客网

题目描述
牛牛有n朵需要摆放的花,但是每朵花呢,高度都不一样,牛牛不喜欢相邻的花高度相差太多,这样会影响美感。
所以牛牛提出了一个“丑陋度”的概念,“丑陋度”意思为在一个摆放序列中,相邻花高度差的最大值。而且牛牛是一个完美主义者,所以他希望:
1.将这些花摆成首尾相接的圆形
2.为了美观,他希望摆放的花“丑陋度”最小
程序应返回:按照这些花排成一个圆的顺序,输出在多个摆放花的序列中,最小的“丑陋度”。

示例1
输入
复制
5,[2,1,1,3,2]
输出
复制
1
说明
可以摆成 1 2 3 2 1这样的序列,最小的“丑陋度”为1
示例2
输入
复制
3,[30,10,20]
输出
复制
20
说明
可以摆成10 30 20这样的序列,最小的“丑陋度”为20
备注:
第一个参数为一个整数 n (2\leq n \leq 10^{5}),代表花的数量。第一个参数为一个整数n(2≤n≤10
5
),代表花的数量。
第二个参数为包含a_{1},a_{2},a_{3}…a_{n}(1 \leq a_{i} \leq 10^{9})的数组,代表每朵花的高度。第二个参数为包含a
1

,a
2

,a
3

…a
n

(1≤a
i

≤10
9
)的数组,代表每朵花的高度。
对于20%的数据,2\leq n \leq10, 1\leq a_{i} \leq10^{2}对于20%的数据,2≤n≤10,1≤a
i

≤10
2

对于60%的数据,2\leq n \leq10^{3}, 1\leq a_{i} \leq10^{6}对于60%的数据,2≤n≤10
3
,1≤a
i

≤10
6

对于100%的数据,2\leq n \leq10^{5}, 1\leq a_{i} \leq10^{9}对于100%的数据,2≤n≤10
5
,1≤a
i

≤10
9

class Solution {
public:
    /**
     * ​返回按照这些花排成一个圆的序列中最小的“丑陋度”
     * @param n int整型 花的数量
     * @param array int整型vector 花的高度数组
     * @return int整型
     */
    int solve(int n, vector<int>& a) {
        // write code here
        sort(a.begin(),a.end());
       deque<int>f;
        for(int i=0;i<a.size();i++){
            if(i&1){
                f.push_back(a[i]);
            }
            else f.push_front(a[i]);
        }
        int ans=0;
        for(int i=1;i<n;i++){
            ans=max(ans,abs(f[i]-f[i-1]));
        }
        ans=max(ans,abs(f[0]-f[n-1]));
        return ans;
    }
};
©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页