组队竞赛、删除公共字符题解

目录

1.组队竞赛

2.删除公共字符 


1.组队竞赛

组队竞赛__牛客网 (nowcoder.com)

组队竞赛、删除公共字符题解_第1张图片

题解:

关键点:队伍的水平值等于队员第二高水平值

细节点:选手水平值<=10^9,int类型的数据范围<2147483647,3个10^9就已经超过int数据范围,所以在计算合值我们采用long long类型。

        要想合值最大,我们就要每次取得的第二大水平值最大,那么我们的划分就应该选2个大数,1个小数,尽可能的保证第二个水平值较大。

        这样一想就简单了,我们只需要把数据从小到大排序,倒着取第二大的数即可。

 假设有n组,就寻找n次,数据个数为size,在数组中,寻找第二大数有公式:a[size-2*(i+1)]

组队竞赛、删除公共字符题解_第2张图片

 代码:

#include 
#include
#include
using namespace std;

int main() {
    int n=0;
    while(cin>>n)
    {
        long long sum=0;
        vectorv;
        v.resize(3*n);
        for(int i=0;i<3*n;i++)
        {
            cin>>v[i];
        }
        //排序
        sort(v.begin(),v.end());
        for(int i=0;i

2.删除公共字符 

删除公共字符__牛客网 (nowcoder.com)

组队竞赛、删除公共字符题解_第3张图片

题解:

思路:删除公共字符,我们只需要把公共字符做个标记,当遍历第一个字符串的时候如果该字符已被标记则删除,我们可以采用哈希映射的方式(unordered_map也行),这里我们用一个256(ASCII码共有256个字符)个int大小的数组进行映射统计。

代码:

#include 
#include
using namespace std;

int main() {
    string str1;
    string str2;
    getline(cin,str1);
    getline(cin,str2);
    //采用哈希映射的思想
    int hash[256]={0};
    for(int i=0;i

你可能感兴趣的:(每日习题,算法,数据结构,c++)