2020中南大学研究生招生夏令营机试题题解

2020中南大学研究生招生夏令营机试题

第一题:缺失的彩虹

题意

颜色共有七种,给定 n ( n ≤ 100 ) n(n≤100) n(n100) 个颜色,问七种颜色中哪些没有出现。

思路

开一个大小为 7 7 7 的数组,分别统计七种颜色出现次数,最后看看哪些出现次数为 0 0 0 即可。

代码
#include "bits/stdc++.h"
using namespace std;

int main() {
   
    int n;
    string s;
    while(cin>>n) {
   
        vector<int> cnt(7,0);
        for(int i=1; i<=n; ++i) {
   
            cin>>s;
            if(s[0]=='r') cnt[0]++;
            else if(s[0]=='o') cnt[1]++;
            else if(s[0]=='y') cnt[2]++;
            else if(s[0]=='g') cnt[3]++;
            else if(s[0]=='c') cnt[4]++;
            else if(s[0]=='b') cnt[5]++;
            else if(s[0]=='p') cnt[6]++;
        }
        vector<char> ans;
        for(int i=0; i<7; ++i) if(cnt[i]==0) {
   
            ans.push_back(char('A'+i));
        }
        cout<<int(ans.size())<<'\n';
        for(char p: ans) cout<<p<<'\n';
    }
}

第二题:最小价值和

题意

给定 n ( n ≤ 1 e 5 ) n(n≤1e5) n(n1e5) 个整数数对 ( a , b ) ( 0 ≤ a , b ≤ 1 e 9 ) (a,b)(0≤a,b≤1e9) (a,b)(0a,b1e9),有一个长度也为 n n n 的数组。

若将某个数对放在数组的第 i i i 个位置上,则其价值为: a ∗ ( i − 1 ) + b ∗ ( n − i ) a*(i-1)+b*(n-i) a(i1)+b(ni)

求将这些数对分配在数组上后所有价值之和的最小值。

思路

这是一种常见的考察排序、贪心的题目。

我们需要的就是给这些数对排个序,而排序就得知道两个数对的“大小关系”,因此我们来考察一下两个数对:

a 1 , b 1 a_1,b_1 a1,b1 i i i 位置, a 2 , b 2 a_2,b_2 a2,b2 j j j 位置,不妨假设 i < j i<j i<j,现在我们仅仅考虑这两个数对交换前后分别产生的价值,并且他们是否应该交换位置不会影响其他数对的价值。

若: a 1 ∗ ( i − 1 ) + b 1 ∗ ( n − i ) + a 2 ∗ ( j − 1 ) + b 2 ∗ ( n − j ) > a 1 ∗ ( j − 1 ) + b 1 ∗ ( n − j ) + a 2 ∗ ( i − 1 ) + b 2 ∗ ( n − i ) a_1*(i-1)+b_1*(n-i)+a_2*(j-1)+b_2*(n-j)>a_1*(j-1)+b_1*(n-j)+a_2*(i-1)+b_2*(n-i) a1(i1)+b1(ni)+a2(j1)+b2(nj)>

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值