2021-07-07上课总结

一、枚举
枚举,就是通过循环、数组等方式进行暴力查找寻找答案。这种方法很容易找到正解,但是时间复杂度会是O(n)以上,要考虑数据范围。

经典例题

[AtCoder ABC143D] Triangles

【问题描述】

小ZZ有NN条木棍,每条木棍的长度为DiDi。
他想在这NN条木棍中选择三条,让这三条木棍能构成一个三角形。小ZZ想知道有多少种方案能构成三角形(不同的方案定义两个方案中至少有一根木棍不相同)。

【输入格式】

输入第一行一个整数NN,表示木棍的个数。

第二行NN个整数DiDi,表示木棍的长度。

【输出格式】

输出一个整数,表示构成三角形的方案数。

分析

这是一道经典的枚举题。有心机的人会因为数据范围而不敢用三重循环,但实际上只需要加一个sort,一个特判,改一下循环开始的条件,三重循环是会压线的,不超时。

code环节

#include<bits/stdc++.h>
using namespace std;
int f[2010];
int main()
{ios::sync_with_stdio(false);//加速用的东西,可以直接用scanf,不用这句话int n;cin>>n;int ans=0;for(int i=1;i<=n;i++) cin>>f[i];sort(f+1,f+n+1);for(int i=1;i<=n;i++)for(int j=1+i;j<=n;j++)//因为要从里面挑选,所以循环开始一定是上一层循环+1{if(f[i]+f[j]<f[j+1]) continue;//因为sort了,所以f[j+1]是第一个比f[j]大的数。如果这句话成立,说明三角形两边和已经小于第三边了。for(int k=1+j;k<=n;k++){if(f[i]+f[j]>f[k] && f[i]+f[k]>f[j] && f[j]+f[k]>f[i])//正常判断ans++;}}   cout<<ans;return 0;
}

二、模拟
模拟,就是按照题目要求一步一步码代码,依照题目的细节、要求来打。这类题一般码量较大,细节较多,但是很适合操作类的的题目。

经典例题

[CSP-J2019] 公交换乘
著名旅游城市 B 市为了鼓励大家采用公共交通方式出行,推出了一种地铁换乘公交车的优惠方案:

在搭乘一次地铁后可以获得一张优惠票,有效期为 45 分钟,在有效期内可以消耗这张优惠票,免费搭乘一次票价不超过地铁票价的公交车。在有效期内指开始乘公交车的时间与开始乘地铁的时间之差小于等于 45 分钟,即:

tbus−tsubway≤45tbus−tsubway≤45

搭乘地铁获得的优惠票可以累积,即可以连续搭乘若干次地铁后再连续使用优惠票搭乘公交车。

搭乘公交车时,如果可以使用优惠票一定会使用优惠票;如果有多张优惠票满足条件,则优先消耗获得最早的优惠票。

现在你得到了小轩最近的公共交通出行记录,你能帮他算算他的花费吗?

输入格式

输入文件的第一行包含一个正整数 nn,代表乘车记录的数量。

接下来的 nn 行,每行包含 3 个整数,相邻两数之间以一个空格分隔。第 ii 行的第 1 个整数代表第 ii 条记录乘坐的交通工具,0 代表地铁,1 代表公交车;第 2 个整数代表第 ii 条记录乘车的票价 priceipricei ;第三个整数代表第 ii 条记录开始乘车的时间 titi(距 0 时刻的分钟数)。

我们保证出行记录是按照开始乘车的时间顺序给出的,且不会有两次乘车记录出现在同一分钟。

输出格式

输出文件有一行,包含一个正整数,代表小轩出行的总花费。

分析
这道%你题,一般人的思路应该是开结构题记录优惠券的时间、钱数、状态,随后用双重循环去枚举优惠券。但是这样很容易超时。优化的方法是在二重循环上动手脚,改变一下循环开始的因素。

code环节

#include<bits/stdc++.h>
using namespace std;
const int mmm=100010;
struct bybus
{long long timee;int pricee;bool heer;
}quan[mmm];
int main()
{ios::sync_with_stdio(false);int n,q=0,p=1;cin>>n;  long long payy=0;for(int i=1;i<=n;i++) {int wayy,price,time;cin>>wayy>>price>>time;if(wayy==0)//是地铁,没有优惠券,但一定会成为优惠券{payy+=price;//没券,直接加钱q+=1;//记录券的数量quan[q].pricee=price;quan[q].heer=1;//券可否使用quan[q].timee=time;//因为一定会成为券,所以直接记录内容}else{bool flag=0;//记录用券了没for(int j=p;j<=q;j++){if(time-quan[j].timee>45) p=j;//相当于j++if(quan[j].heer==1 && quan[j].pricee>=price && time-quan[j].timee<=45)//判断条件{quan[j].heer=0;flag=1;break;//因为这里直接退出循环了,所以上面要用一种特殊的方法来实现j++}}if(flag==0)payy+=price;//没用券,加钱}}cout<<payy;return 0;
}

三、前缀和、差分
前缀和和差分都是预处理,前缀和可以让求区间和值的时间复杂度降到O(1);
差分可以让区间整体加(减)一个数的时间复杂度降到O(1)。前缀和和差分是互逆运算。在这里就不放前缀和和差分的例题了,希望好好理解一下,拿几道水题练练手。

暑假集训第一天 枚举+模拟+前缀和+差分相关推荐

  1. 一起开心暑假集训第一周限时训练 2020/7/5

    文章目录 A - Goldbach's Conjecture POJ - 2262 B - 同余方程 计蒜客 - T2010 C - Tr A HDU - 1575 D - C Looooops PO ...

  2. 暑假集训考试反思+其它乱写

    7.20 Sat 下午返校 回来改题 sdfz的巨佬觉得线上虐人不够爽,所以他们过来了 改T2的时候发现一个问题 如果要用$i$和$i\ xor\ 1$表示相邻的两条边,链式前向星tot初值必须设为1 ...

  3. 【2021软件创新实验室暑假集训】SpringMVC框架(设计原理、简单使用、源码探究)

    系列文章目录 20级 Java篇 [2021软件创新实验室暑假集训]计算机的起源与大致原理 [2021软件创新实验室暑假集训]Java基础(一) [2021软件创新实验室暑假集训]Java基础(二) ...

  4. 2016暑假集训总结

    Preface 这是蒟蒻lyd729在初二升初三的暑假里训练的总结. 来看看一年前的lyd729写的暑假集训总结(链接),真是觉得自己长大了好多. 这一年发生了太多故事.(我来讲故事啦) 去年,一升初 ...

  5. 2020寒假训练第一周 思维+模拟

    这周相对来说比较简单都是基础题 同样 枯木逢春不在茂 年少且惜镜边人 直接看题吧!!!!奥利干! 1. 对于给定的一个字符串,统计其中数字字符出现的次数. Input输入数据有多行,第一行是一个整数n ...

  6. 暑假集训后的一些感想

    在开学一个星期后我终于还是写下了这篇有关暑假集训博客,暑假集训的开始时间是七月十八号,是放暑假后的第三个星期.也就是说刚放假时我们还都回家了两个星期,快乐的玩耍了一阵子.随着时间的推移,时间来到七月十 ...

  7. 2014暑假集训总结

    为期五个星期的暑假集训就这么结束了,如果说寒假的集训是为我们挖了一个个大坑,那么暑假的集训就只能说是宇宙大爆炸了.到了现在才发现,寒假我们学习的东西仅仅只是皮毛而已,这次学习的高级数据结构,真的是把我 ...

  8. 2020暑假集训项目——Java简易聊天室

    经过一周的学习与搬砖,我成功的完成了暑假集训的第一个项目--Java简易聊天室,这里对整个项目做一个总结.(文末附下载地址) 本项目支持的功能: 1.可同时开启多个客户端进行多人聊天: 2.可与在线的 ...

  9. 题解报告(CDUT暑期集训——第一场)

    题解报告(CDUT暑期集训--第一场) A - Maximum Multiple HDU - 6298 思路:先按照题意打表 发现规律 就出来了(最开始没开long long贡献了3发 然后又忘了换行 ...

最新文章

  1. dhcp只能分配与路由器相同网段么_dhcp工作原理
  2. codeforces B. Fox and Cross 解题报告
  3. 前端学习(1873)vue之电商管理系统电商系统之实现退出功能
  4. (计算机组成原理)第五章中央处理器-第五节2:指令流水线影响因素和分类及多发技术
  5. memset汇编实现,跟踪得到的
  6. 支付宝有50万存款,但欠30万房贷。是还房贷好,还是买基金好?
  7. 相关插件在项目中使用参考
  8. 数据结构与算法学习笔记之 提高读取性能的链表(上)
  9. 福州大学计算机学院软件实力,福建五大重点大学,哪一所实力最好?
  10. dsf5.0 element ui表单相关验证
  11. openCV获取和修改像素值
  12. 阿诺医药C轮融资近1亿美元,快速推进肿瘤免疫创新药全球研发
  13. 1月末支付机构备付金总量达1.4万亿,较去年12月下滑两千多亿
  14. faceless 开源_Big Faceless Java报表生成器
  15. 百度竞价推广中的,28定律是什么?
  16. 人脸识别(二) 人脸1V1,PK明星脸
  17. 如何用python画笑脸QQ表情——turtle库实践
  18. AdSense 介绍
  19. dpabi预处理报错——索引超出矩阵维度
  20. (Easyx联合c++的通讯录系统)续

热门文章

  1. 新版宇宙主义 for mac(星球创世策略游戏) v0.1.56中文
  2. 免费的TCP测试工具,自己写的,运行jar包就能用,定时通过TCP协议发送自定义XML
  3. Android挂逼修炼之行---防自动抢红包外挂原理解析
  4. [群邑]那几个月的日子
  5. java时间间隔_java 计算两个 日期时间 相间隔多少天小时分钟 等
  6. python画散点图和折线图
  7. 印象笔记 for Mac(Evernote)如何简化工作、学习与生活
  8. Reattach和Merge操作的比较
  9. linux主机宕机排查问题方法
  10. 缓存穿透、缓存雪崩、缓存击穿区别和解决方案