科大讯飞2019校招 笔试

修改成绩

时间限制:C/C++语言 1000MS;其他语言 3000MS 内存限制:C/C++语言 65536KB;其他语言 589824KB

题目描述:

华老师的n个学生参加了一次模拟测验,考出来的分数很糟糕,但是华老师可以将成绩修改为[0,100]中的任意值,所以他想知道,如果要使所有人的成绩的平均分不少于X分,至少要改动多少个人的分数?

输入

第一行一个数T,共T组数据(T≤10)

接下来对于每组数据:

第一行两个整数n和X。(1≤n≤1000, 0≤X≤100)

第二行n个整数,第i个数Ai表示第i个学生的成绩。(0≤Ai≤100)

输出

共T行,每行一个整数,代表最少的人数。

样例输入
2
5 60
59 20 30 90 100
5 60
59 20 10 10 100
样例输出
1 2
Hint:对于第一组数据,将59改成60即可

#include <iostream>
#include<bits/stdc++.h>
using namespace std;
int cmp(int a,int b){
    return a>b;
}
int main() {
    int t;
    cin>>t;
    while(t--){
        int n,m;
        int sum=0;
        cin>>n>>m;
        int a[n];
        int b[n];
        for(int i=0;i<n;i++){
            cin>>a[i];
            sum+=a[i];
            b[i]=100-a[i];
        }
        
        sort(b,b+n,cmp);
        int left=n*m-sum;
        if(left<=0) cout<<0<<endl;
        else{
            int sum2=0;
            int cnt=0;
            for(int i=0;i<n;i++){
                sum2+=b[i];
                cnt++;
                if(sum2>=left){
                    cout<<cnt<<endl;
                    break;
                }
            }
            
        }
    }
	return 0;
}

题目二:杀手

时间限制:C/C++语言 1000MS;其他语言 3000MS 内存限制:C/C++语言 65536KB;其他语言 589824KB

题目描述:

有n个杀手排成一行,每个杀手都有一个不同的编号(编号为1-n),在每个夜晚,杀手都会行动,如果某个杀手编号大于他右边的杀手的编号,他就会杀死他右边的杀手,杀手是的行动是瞬间的,因此一个人可能某一个夜晚既杀死了别人又被别人杀死,例如3,2,1这个顺序,在第一个夜晚2会杀死1,同时3也会杀死2。

显而易见,一段时间之后,就不会有人杀或被杀,平安夜也就到来了,请问在平安夜之前有多少个夜晚。

输入

输入第一行是一个整数n(1≤n≤100000),表示杀手的数量。

接下来一行有n个数,是一个1-n的全排列。

输出

输出包含一个整数,表示平安夜之前经历了多少个夜晚。

样例输入
10 10 9 7 8 6 5 3 4 2 1
样例输出
2
Hint
补充样例
输入样例2: 6 1 2 3 4 5 6
输出样例2 :0
样例解释: 样例1中杀手的变化为[10 9 7 8 6 5 3 4 2 1]->[10 8 4]->[10],故答案为2。

#include <iostream>
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
int cnt=0;
vector<int> a;
int x;
int main() {
    int n,x;
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>x;
        a.push_back(x);
    }
    bool flag=true;
    int cnt=0;
    while(flag){
        vector<int> next;
        next.push_back(a[0]);
        for(int i=1;i<a.size();i++){
            if(a[i]>a[i-1]){
                next.push_back(a[i]);
            }
        }
        if(next.size()<a.size()){
            cnt++;
            a=next;
        }
        else flag=false;
    }
    cout<<cnt;
	return 0;
}

附一个大佬的python版本

"""
2
5 60
59 20 30 90 100
5 60
59 20 10 10 100

"""

groups = int(input())
for i in range(groups):
    tmp = input().split()
    people, score = int(tmp[0]), int(tmp[1])
    tmp = input().split()
    scores = [int(i) for i in tmp]
    sums = sum(scores)
    times = 0
    while sums < people * score:
        min_score = min(scores)
        min_idx = scores.index(min_score)
        sums += 100-min_score
        times += 1
        del scores[min_idx]
    print(times)




"""
10
10 9 7 8 6 5 3 4 2 1
"""

people_num = int(input())
tmp = input().split()
slatters = [int(i) for i in tmp]
def existKill(slatters):
    res = 0
    kills_idx = []
    for i in range(len(slatters)-1, 0, -1):
        if slatters[i] < slatters[i-1]:
            res += 1
            kills_idx.append(i)
    new_slatters = [slatters[i] for i in list(set([j for j in range(len(slatters))]) - set(kills_idx))]
    return (res, new_slatters)

nights = 0
while existKill(slatters)[0]:
    # print('old: ', slatters)
    slatters = existKill(slatters)[1]
    # print('new: ', slatters)
    nights += 1
print(nights)

猜你喜欢

转载自blog.csdn.net/behboyhiex/article/details/82500926