您当前的位置: 首页 > 

钟钟终

暂无认证

  • 3浏览

    0关注

    233博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

课程总结----第八周(先发后补喽)

钟钟终 发布时间:2021-04-30 23:01:31 ,浏览量:3

4.27 训练收获: C题: 想到肯定与最大最小值有关,因为团队除了问题,谁都不想去认真做题。慢慢调整。 思路一:对最高的进行修减,最低的不必修建,直到所有花等高。举一组样例,规律其实很好找,不必逆向思维。 思路二:将花修减到等高,必定要对最高的进行处理。逆向思维,也就是将每朵花加1,和最高的相等,如果这个和sum小于最大数,则成立。(最大数-sum)表示最后修减的高度。

D题:主要是取模的问题。2的64次方无法表示,已经越界了,结果显示为0。其他的都已经想明白了。看完题解,发现把问题想简单了。

E题:本题过了,但是代码实现不够精炼。我们采用数组记录连续的字串数目;其实用while当遇到一样的便进行记录,下标累加,另开个变量直接进行记录总和。

4.28 训练收获: E题: 采用的是string数组,因为一个小错误,wr了四发才过,罚时太多,队伍状态不好,但在回暖。想到用map,但都没信心用这个方法去写,复习一遍。 三种表示用法,重点记住数组表示的即可,了解迭代器用法。

maps1;
maps2;
 for(int i=0;isecond);
   }

A题: 好不容易看懂了题意,却没跟队友说明白意思,最后掐着时间点侥幸过的。 题意:给定一个数组,可以补x个数,从1开始,数组中有的不必补充,最大能补到多少,输出这个数. 例子: 20到40,只需要填充19个数,x减去填充数值,填充完后数字要更新为40。

 temp=(a[i]-a[i-1]-1);  //填充数

注意点: 1.会出现一种特殊情况。刚好x消耗完,但是数组中有几个数能跟在后面。 2.去重操作: int t=unique(a+1,a+n+1)-(a+1); 这个技巧很棒,能免去很多讨论。 3.当最后一个数被补充完后,但是x并没有被消耗尽,因此要加上x。

4.29 cf比赛收获: 前两个水题模拟下就过了,收获就是一些细节处理:

int temp=(r+b-1)/b ;    //a题非常好的进一方式

重点讲一下c题和d题 (插一句,多么希望自己能过掉c,d题,两题思路都有点正确,代码的处理也找到了方法,也尽力尝试了下,但还是做不出来。看似距离ac很近,其实差的还是非常多) C题:(两种方法,第一种只用map) 我的思路:第一时间想到了用map,第一个关键字为学生注册学校,第二个为学生技能值。然后分别统计每所学校学生的技能值,记录i前的总和。根据k的不同值,利用统计的和减掉技能值低的总和。然后累加到输出的数组ans[n]中。 思路缺陷: 标准的map+vector解题 1.只是简单会用map。第二个关键字应该是int类型的vector容器,因为同一所学校记录不同的技能值。

int n;cin>>n;
        vectora(n,0),s(n,0);   //定义n个元素,初值都赋为0
        for(int i=0;i>a[i];
        for(int i=0;i>s[i];
        mapb;
    //b为map容器,第一关键字为学校代号;第二个用vector容器记录此学校不同技能值

2.vector默认从0开始存,迭代器begin也是从0开始记录的。所以如果从1开始存的话,既不便利迭代器的使用,也使得第二关键字的排序不便。

for(it=b.begin();it!=b.end();it++)
        {
            vector temp=it->second;
            sort(temp.begin(),temp.end());
         }

3.数据的存入和对于k值的判断(从1开始思考的形式)可以分开看,但要着重注意下标

           long long int sum=temp[temp.size()-1];
            ans[0]+=sum;
            for(int i=2;i            
关注
打赏
1664378814
查看更多评论
0.0382s