Day 15

发布于:2025-05-13 ⋅ 阅读:(15) ⋅ 点赞:(0)

1.chika和蜜柑

chika和蜜柑
TopK、堆、排序

1.1 解析

在这里插入图片描述

1.2 代码

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct Cmp
{
  bool operator()(const pair<int,int>& p1,const pair<int,int>& p2)
  {
      if(p1.first>p2.first)return true;
      else if(p1.first==p2.first&&p1.second<p2.second) return true;
      return false;
  }
};
int n,k;
int main()
{
    //输入样例
    cin>>n>>k;
    vector<int> s(n),t(n);
    for(int i=0;i<n;i++)cin>>s[i];
    for(int i=0;i<n;i++)cin>>t[i];
    //将甜度和酸度绑定
    vector<pair<int,int>> ts(n);
    for(int i=0;i<n;i++)
    {
        ts[i].first=t[i];
        ts[i].second=s[i];
    }
    //排序+降序
    sort(ts.begin(),ts.end(),Cmp());
    //统计前k个
    long long sumt=0,sums=0;
    for(int i=0;i<k;i++)
    {
        sumt+=ts[i].first;
        sums+=ts[i].second;
    }
    cout<<sums<<' '<<sumt;
    return 0;
}

2.对称之美

对称之美
字符串、哈希

2.1 解析

在这里插入图片描述

2.2 代码

#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
int t,n;
string s;
bool vis[110][26];//哈希表

bool check(int left,int right)
{
    for(int i=0;i<26;i++)
    {
        if(vis[left][i] && vis[right][i])return true;//该位置上必须出现过
    }
    return false;
}
int main()
{
    cin>>t;
    while(t--)
    {
        memset(vis,0,sizeof(vis));
        //输入数据
        cin>>n;
        for(int i=0;i<n;i++)
        {
            cin>>s;
            //将字符串存入哈希表中
            for(auto& ch:s)
                vis[i][ch-'a']=true;
        }
        //判断是否回文
        int left=0,right=n-1;
        while(left<right)
        {
            if(!check(left,right))break;
            ++left,--right;
        }
        if(left>=right)cout<<"Yes"<<endl;
        else cout<<"No"<<endl;
    }
    return 0;
}

3.添加字符

添加字符
字符串、枚举

3.1 解析

在这里插入图片描述

3.2 代码

#include <iostream>
using namespace std;
#include <string>
string a,b;
int main()
{
    cin>>a>>b;
    int m=a.size(),n=b.size();
    int ret=m;//记录不相等字符的个数
    for(int i=0;i<=n-m;i++)//枚举a的起始位置
    {
        int tmp=0;
        for(int j=0;j<m;j++)
        {
            if(a[j]!=b[i+j]) tmp++;
        }
        ret=min(ret,tmp);
    }
    cout<<ret<<endl;
    return 0;
}

网站公告

今日签到

点亮在社区的每一天
去签到