前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >解题报告(牛客OI周赛7-普及组)

解题报告(牛客OI周赛7-普及组)

作者头像
glm233
发布2020-09-28 10:17:22
5230
发布2020-09-28 10:17:22
举报

怎么评价呢?如果你什么算法都不会,纯模拟250+这个样子趴

A题

某天,一只可爱的肥橘喵在路上走,突然遇到了一个怪人,那怪人自称PM6,“小肥喵,这里有一道水题,答对了我就请你吃狗肉,答错了你就请我吃猫肉!”

喵咪瑟瑟发抖:“QAQ什么题?”

PM6道:“给你坐标轴上的N个点,求出对于每个点,有多少个点的 X 坐标和 Y 坐标都大于它。”

毫不意外,蠢肥喵完全不会这道题并面临着被做成猫肉火锅的危险,求求你救救喵咪!

分析:数据范围1~1000,直接上o(n^2)暴力枚举即可(全场最水.

#include<bits/stdc++.h>
using namespace std;
int n;
struct node
{
    int x,y;
}p[1005];
int main()
{
    ios::sync_with_stdio(false);
    cin>>n;
    for(int i=1;i<=n;i++)cin>>p[i].x>>p[i].y;
    for(int i=1;i<=n;i++)
    {
        int cnt=0;
        for(int j=1;j<=n;j++)
            if(p[j].x>p[i].x&&p[j].y>p[i].y)cnt++;
        cout<<cnt<<endl;
    }
}

B题

某天,一只可爱的小兔砸在路上蹦蹦跳跳地走着,怪人PM6出现了,于是小兔子被盯上了。

PM6:“免子。哦不,小兔子。你长得真好…不对,真可爱。我这里有一道很容易很容易的题目,答对了我就请你吃萝卜,答错了你就请我吃兔肉,好不好呀~~?”

小兔砸:“萝卜!?好呀好呀好呀。”于是笨笨的兔纸入套了。

PM6:“我这里有一个由 N 个数组成的序列,给你 M 个询问,每个询问会给你一个数 X ,对于每个询问,你要回答出序列中与这个值最接近的元素。”

听完题后,兔子吓成一坨免子了,面临着变成红烧兔头的危险,求求你救救兔子!

分析:其实粗看模拟会超时,但是就是a了我也无话可说...最接近的元素用绝对值表示即可

还有一开始将minn设为INF 一开始将minn设为INF!! 一开始将minn设为INF!!!如果设成99999之类只能20分,牛客数据就是这样

#include<bits/stdc++.h>
using namespace std;
int a[100005],n,m;
void search(int x)
{
    int minn=0x3f3f3f3f,temp[100005];
    memset(temp,0,sizeof(temp));
    for(int i=1;i<=n;i++)
    {
        if(a[i]==x){cout<<a[i]<<endl;return ;}
        temp[i]=abs(a[i]-x);
        minn=min(temp[i],minn);
    }
    for(int i=1;i<=n;i++)if(minn==temp[i]){cout<<a[i]<<endl;return; };
}
int main()
{
  cin>>n;
  for(int i=1;i<=n;i++)cin>>a[i];
  sort(a+1,a+1+n);
  cin>>m;
  while(m--)
  {
      int x;
      cin>>x;
      search(x);
  }
	return 0;
}

C题

另一天,一只可爱的围着围巾的肥企鹅在路上摇摇晃晃地走着,遇上了迎面走来的打着饱嗝的PM6。小企鹅预感不妙,这不就是最近有名的恶人PM6么!吓得立刻扭头就想跑。

PM6:“小火汁,站住!我不吃你(谁叫你是保护动物)。我这有一道简单题,如果你答对了,我就给你吃鱼肉,如果你答错了,就免费帮我充游戏币!”

企鹅:“_(:3J∠)_(默默摘掉围巾)”

PM6:“我给你一个文本串 S ,再给你两个串A、B,你要将文本串中的 A 都转换成 B ,转换后的字符不再参与转换,输出最终的文本串。”

求求你救救企鹅!

分析:字符串KMP,笔者太弱今天才get到这个技能点,不过怎么说呢,用stl一时爽,一直用一直爽!!!

很简单的字符串函数应用

#include<bits/stdc++.h>
using namespace std;
string a,b,c;
int main()
{
cin>>a>>b>>c;
while(1)
{
    int k=a.find(b);
    if(k>=a.length())break;
    a.erase(k,b.length());
    a.insert(k,c);
}
cout<<a;
    return 0;
}

D题

可能很多人要吐槽为什么标题不是“救救blabla”了。

怪人PM6喜欢数糖纸,不同的糖纸有不同的颜色,一共有 N 张糖纸,第 i 张糖纸颜色为 Ci ,它们的位置都是固定的。PM6喜欢五彩缤纷的糖纸,所以他不希望有重复的颜色。他有一次机会,可以收集任意一段连续区间内的糖纸。求出PM6最多能收集多少张糖纸。

!分析:题意很清楚,要用到尺取法,通过l与r不断移动来找最大连续区间。如果r移动到一个有标记的数字一切从头,r之前数字标记全清零,否则r继续移动,持续更新ans=max(ans,r-l)

#include<bits/stdc++.h>
using namespace std;
int a[1000005],n,l,r,ans,flag[1000000005];
int main()
{
    ios::sync_with_stdio(false);
   cin>>n;
   l=r=1;
   for(int i=1;i<=n;i++)cin>>a[i];
   while(r<=n)
   {
       if(!flag[a[r]])
       {
           flag[a[r]]=1;
           r++;
           ans=max(ans,r-l);
       }
       else
       {
           while(flag[a[r]])flag[a[l]]=0,l++;
       }
   }
   cout<<ans;
    return 0;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-03-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档