怎么评价呢?如果你什么算法都不会,纯模拟250+这个样子趴
某天,一只可爱的肥橘喵在路上走,突然遇到了一个怪人,那怪人自称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;
}
}
某天,一只可爱的小兔砸在路上蹦蹦跳跳地走着,怪人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;
}
另一天,一只可爱的围着围巾的肥企鹅在路上摇摇晃晃地走着,遇上了迎面走来的打着饱嗝的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;
}
可能很多人要吐槽为什么标题不是“救救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;
}