题解&反思(下)

   在上一篇讲了第一和第二题,现在来讲讲第三和第四题。

—————————————废话分割线——————————————

             4.牛语(因为太简单而被先拿出来讲的第四题)

题目描述:

给定N个单词,将单词按规则变化后,按原顺序输出。

变化规则:

如果一个单词的以一个元音字母('a','e','i','o','u)开头,那么只需在 这个单词的结尾加上"cow".例如,"udder"需要变成"uddercow"; 如果一个单词的第一个字母不是元音字母,那么只需把这个单词的第一个字母放到单词结尾,然后再在结尾加上"ow".

例如 "farmer"需要变成"armerfow".所以"the cows escape at dawn"就会变成"hetow owscow escapecow atcow awndow."

数据规模:

1<=N<=100,

单词长度:每个不超过40(且保证都为小写)

 

基本思路:

这道题就是一个字符串操作加强模拟,并且也没有在数据范围上刁难你,按要求模拟即可。

其实这道题还有一个需要注意的细节(第一次做时把我坑惨了):
C++的字符串输入后默认从第0位开始存!!

(原本是P党的我下意识的认为是从第一位开始存的。。)

附上代码:

#include<bits/stdc++.h>

using namespace std;

int main()

{

   strings;

   charp;

   intn;

   cin>>n;

   for(int i=1;i<=n;i++)

    {

      cin>>s;

      p=char(s[0]);

      if(p=='a'||p=='e'||p=='i'||p=='o'||p=='u')

       {

         cout<<s<<"cow"<<endl;

       }

      else

       {

         for(intj=1;j<s.length();j++)

         cout<<s[j];

         cout<<s[0]<<"ow"<<endl;

       }

    }

   return0;

}

————————————重点题来临分割线——————————————————

                 3.采蘑菇的拖拉机

题目描述:

   一个农场被分为了一个平面坐标系,最左下角的坐标为(1,1),最右上角的坐标为(10^5,10^5).

   每秒在农场上都会产生一个蘑菇,并且你会知道它的坐标。

   你能从任意一点出发朝八个方向中的任意一个方向采集蘑菇,不能转弯,且只有一次采集机会。(八个方向分别是和坐标轴平行的四个方向和与坐标轴夹角45度的对角线)

      求:如果要一次性的采集K个蘑菇,最早在什么时间完成任务。

【输入】

为了防止骗分,测试数据为两组,每一组数据格式如下:

第一行两个整数N和K。表示有N个蘑菇出现,朱昶成要采集K个蘑菇。

      接下来N行,第i行为两个整数Xi和Yi,表示第i秒发现的蘑菇的坐标为Xi和Yi。

      在某一个坐标陆续发现多个蘑菇的可能性也是有的。

【输出】

两行,每行一个整数T,表示最早第T秒就可以完成K个蘑菇的采集。如果无法满足要求,那么这行输出-1.

数据规模:

50% 数据保证 Xi,Yi在[1..300]之间

  100% 数据保证 N在[2..10^6]之间, K在[2..N]之间。Xi和Yi在[1..10^5]之间。

基本思路:

我们要统计所有行,所有列和所有45°对角线什么时候能有k个蘑菇。

我们开4个数组,第1个数组的第i个元素表示第i行的蘑菇数,

第2个数组的第i个元素表示第i列的蘑菇数

对于对角线,我们根据经验,如果两个点的坐标之和相等,是在左下到右上的对角线上,如果两个点的坐标之差相等,是左上到右下的对角线上。

如果坐标要做差,会有负数,我们给每个差+100000的偏移量。

——————————————完·结———————————————————

 

猜你喜欢

转载自blog.csdn.net/qq_40716114/article/details/78699023