【蓝桥】第16场---小白入门赛

具体链接:「蓝桥·算法双周赛」第十六场分级赛——小白入门赛

自己记录一下。

1. 喜鹊罢工


这个题很简单。
代码:

#include <iostream>
using namespace std;
int main()
{
  cout<<365/7+1;
  return 0;
}

2. 牛郎取名


这个题也很简单。
代码如下:

#include <iostream>
#include <string>
using namespace std;
int main()
{
  // 请在此输入您的代码
  int n;
  cin>>n;
  string s;
  cin>>s;
  while (n--)
  {
    int p;
    cin>>p;
    cout<<s[p-1];
  }
  return 0;
}

3. 织女的考验



这个题就是把输入的26个字母各有多少都记录在数组中,然后最后两个数组的字母频率的差值于若大于2,则输出NO,即可。

#include <iostream>
#include <string>
#include <cmath>
using namespace std;
int main()
{
  // 请在此输入您的代码
  int t;
  cin>>t;
  while(t--)
  {
    string s,t;
    cin>>s>>t;
    int  sc[26]={0};
    int  tc[26]={0};
    for (char c:s)  sc[c-'a']++;
    for (char c:t) tc[c-'a']++;
    string flag="YES";
    int freq=0;
    for (int i=0;i<26;i++)
    {
      if(sc[i]!=tc[i]) freq+=abs(sc[i]-tc[i]);
    }
    if (freq>2) flag="NO";
    cout <<flag<<endl;;
  }
  return 0;
}

4. 仙男仙女



这个题刚开始看的时候就没注意到原始数据没有排序过的,所以一直不知道哪里出现了问题。
当把数据就排序过,就没问题了。
代码:

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
  // 请在此输入您的代码
  int n; cin>>n;
  vector<pair<int,int>> p(n);
  int a;
  for(int i=0;i<n;i++)
  {
    cin>>p[i].first;
  }
  int sum=0;
  for(int i=0;i<n;i++)
  {
    cin>>p[i].second;
  }
  sort(p.begin(),p.end());
  for(int i=0;i<n;i++)
  {
    
    if(i!=0 && i!=n-1) if(p[i].first-p[i].second >p[i-1].first && p[i].first+p[i].second <p[i+1].first) sum++;
    
    if( i== 0) if(p[i].first+p[i].second <p[i+1].first) sum++;
    
    if( i== n-1)   if(p[i].first-p[i].second >p[i-1].first) sum++;
  }
  cout<<sum;

  return 0;
}

5. 牛郎的微信群




这个题运用了邻接表,几乎没有做过这样的算法练习,盲区吧,心里也有一种害怕,不知道怎么入手。
这里先附上别人的代码,之后复盘到这块的时候,在做一下。

#include <bits/stdc++.h>
#define int long long
using namespace std;

const int N = 2e5 + 10;
vector<int> e[N];

void solve() {
  int n;
  cin >> n;
  for(int i = 1 , u , v ; i < n ; i++) {
    cin >> u >> v;
    e[u].push_back(v);
    e[v].push_back(u);
  }
  vector<int> v(n + 1);
  for(int i = 1 ; i <= n ; i++) {
    int x = 0;
    for(auto& k : e[i]) {
      x += (e[k].size() - 1);
    }
    v[i] = x;
  }
  for(int i = 1 ; i <= n ; i++) cout << v[i] << " ";
  cout << endl;
}

signed main()
{
  int t = 1;
  //cin >> t;
  while(t--) solve();
  return 0;
}

6. 久别重逢



这个题找递推公式,比较难。(我现在都还是有点困惑,)

#include <iostream>
using namespace std;
const int mod = 1e9 + 7;
const int N = 2e5 + 5;
typedef long long ll;
ll a[N];
int main() {
    int T, x, y, k, n;
    cin >> n >> k;
  for(int i=0;i<k;i++)a[i]=1;
    for (int i = k; i <= n; i++)
        a[i] = (a[i - 1] + a[i-k])%mod;
    cout << a[n];
    return 0;
}

这六个题目,1,2,非常简单。3,4,需要转换一下,5,6,有一些难度。
同时,最主要还是发现了自己的很大的不足,哪些地方需要进一步学习和练习,更加清楚了一点。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

釉色清风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值