随笔分类 -  codeforce

摘要:题意:Kefa想去餐厅,要穿过公园。公园由一棵树组成,有n个节点,叶子节点上是餐厅,每节点上可能有猫,Kefa害怕猫,当有连续m只猫出现时,就不能继续往下走了。我们需要找出Kefa能去多少家餐厅。 题解:dfs深搜,设置跳出条件:连续猫得数量超过m;或者已经走到了叶子节点(度为0的节点)。搜索所在点 阅读全文
posted @ 2021-08-12 13:53 Uiney 阅读(90) 评论(0) 推荐(0) 编辑
摘要:题意:有n个人要被分到m个队伍中,组成一个队伍中的人,每两个人会成为一对朋友,求最多和最少有几对朋友。 题解:一个组里的朋友对数,用排列组合来计算,我们发现基数越大的,朋友数会成倍增加,所以,最大的朋友数就是让人尽可能的都在一个队伍中,这样产生的朋友数是最大的。最小,当然就是让计数尽可能的小。我们分 阅读全文
posted @ 2021-08-10 16:28 Uiney 阅读(57) 评论(0) 推荐(0) 编辑
摘要:题意: Valera要在n本书中读连续的书,并且有时间限制t。每本书对应了时间a[i],求Valera最多能读多少本书。 题解: 用双指针? 当时间充足的情况下,从第1本开始计数(读),当时间耗尽时,从第1本开始放弃(不读),接着读后面的书。 存储最大值。 ACcode: int main() { 阅读全文
posted @ 2021-07-30 09:39 Uiney 阅读(73) 评论(0) 推荐(0) 编辑
摘要:题意: 有一个数组ai,和另一个数组pi,pi代表数组a中不同的位置,pi表示可以交换a[pi] 和 a[pi+1],任务是判断是否能够通过交换操作得到一个非下降序列。 题解(2种): 把pi排序遍历,满足条件时计数,当不满足条件时,把范围内的ai全部排序,最后判断是否符合条件。 直接暴力,遍历pi 阅读全文
posted @ 2021-05-28 19:54 Uiney 阅读(41) 评论(0) 推荐(0) 编辑
摘要:题意: 有一个n*m的格路,要求从(1,1)点走到(n,m)点,每一步有相应花费: 向右移动到(x,y+1)— 花费 x 元; 向下移动到(x+1,y) — 花费y 元. 查询输入是否符合结果。 题解: 我是菜鸡,所以选用的方法是找规律,也就是通过计算得出,无论走那条路,走到终点时,答案都是一样的, 阅读全文
posted @ 2021-05-26 20:30 Uiney 阅读(63) 评论(0) 推荐(0) 编辑
摘要:题意: 给出一串由0,1,?组成的字符串,要求把?变成0或1,保证字符串为回文字符串且满足有a个0,b个1。 题解: 在cf上看到的大佬写的极短的题解(某菜写出来也太长了)。 ACcode: int main() { int t; cin >> t; while (t--) { int a, b; 阅读全文
posted @ 2021-05-23 09:59 Uiney 阅读(94) 评论(0) 推荐(0) 编辑
摘要:题意:这是一道用到异或运算的题,给出的m-1个数和最后一个数进行异或运算(题中描述为:不同兵种数不超过k,即通过异或运算,数出1的个数进行比较) 题解:就按题意去做。 ACcode: int main() { int n, m, k,it,a[1010]; cin >> n >> m >> k; f 阅读全文
posted @ 2021-05-19 21:04 Uiney 阅读(52) 评论(0) 推荐(0) 编辑
摘要:题意:输入t个测试,每个测试输入n,k;判断n是否能使用k个不相同的奇数表示出来。 最开始想得太复杂,分了好多种情况,写了很多没用的代码。 题解:应该想什么样的数才能被表示出来: 奇偶对应(n为奇数,k也应该是奇数) n>=k*k(当不满足这个条件时,是找不到k个奇数的和等于n的) 有了这两个条件, 阅读全文
posted @ 2021-05-04 13:28 Uiney 阅读(48) 评论(0) 推荐(0) 编辑
摘要:题意:制作拿破仑蛋糕,最开始是个空盘子,每一次放上一层蛋糕,输入的数代表第几层倒几层奶油(能够覆盖几层,如果层数不够,允许浪费),输出每层被覆盖的情况。(覆盖为1,否为0) 题解:如果直接用for循环遍历会超时(样例数据太大了),我们要优化循环。 ACcode: int n, a[200100],v 阅读全文
posted @ 2021-03-21 15:47 Uiney 阅读(29) 评论(0) 推荐(0) 编辑
摘要:题意:输入n,m,再输入长度为n的字符串s和长度为m的字符串t,从字符串s里找出子序列p,要求spi和ti相同(最终达到子序列和t相同)。求pi+1−pi的最大值。(上一个字符和下一个字符的最大间隔) 题解:要最大间隔,就去找上一个字符最先出现的位置,和后一个字符最后出现的位置,即得最大值,再在众多 阅读全文
posted @ 2021-03-14 09:11 Uiney 阅读(74) 评论(0) 推荐(0) 编辑
摘要:题意:给出n个数,问分成3组数且每组数和相等,(不改变原数列顺序)有几种分法。 题解:先求数列总和,判断这个数列是否能分成大小相等的3份。能的话,可以从后往前找,把遇到的和满足条件的标记一下。再从后往前,用前缀和的方式,把分法个数加起来,(说明在这个数之后,能够找到的分法和)然后再从前往后,找到满足 阅读全文
posted @ 2021-03-13 11:58 Uiney 阅读(100) 评论(0) 推荐(0) 编辑
摘要:题意:给出一串有正有负的整数,要求找到最大的符合+-+-+-(或者-+-+-+)的最大子序列。注意:该序列可以跳着选,但是顺序不能变。 题解:从头开始加,如果两个数符号相同,就比较大小,选出最大的数加入子序列(最大的数加最大的数当然最大啦)。 ACcode: int n,a[200010],b[20 阅读全文
posted @ 2021-03-10 08:49 Uiney 阅读(50) 评论(0) 推荐(0) 编辑
摘要:题意:输入n,k两个数,输出第k个不能被n整除的数。 题解: 假如我们输入的3,5,这表示我们需要找到第5个不被3整除的数,我们把数列出来,找到能被3整除的数,发现数列被分成了一段一段的且长度相等, 段数等于(5-1)/(3-1)=2,2也是能被3整除的数的个数。 我们可以通过(k-1)/(n-1) 阅读全文
posted @ 2021-03-09 10:49 Uiney 阅读(240) 评论(0) 推荐(0) 编辑
摘要:题意:有一个n*n的方格图,每个格子可以向周围8个方向移动,一次只能移动一步,最后要让所有的格子都移动到中间格子,问要多少步才能实现目标。 题解: 自己画的图: 当n=1时,只有中间一个小格,所以不需要移动,答案为0。 当n=3时,就要让橙色那一圈方格都移到中间,八个方格移动的步数就是8。 当n=5 阅读全文
posted @ 2021-03-05 14:55 Uiney 阅读(85) 评论(0) 推荐(0) 编辑
摘要:题意:输入一个数n(篱笆),再输入一个k(指的一个区间,从i到i+k-1),再输入n个数 ai(在题中指的篱笆的高度),题中要求找到和最小的区间,并输出该区间的左端点。 题解:这道题是用前缀和,暴力是不可能暴力了。首先,要想找到和最小的区间,最好是能够直接得到对应区间的和,这时候就要想到前缀和了。将 阅读全文
posted @ 2021-03-02 23:17 Uiney 阅读(70) 评论(0) 推荐(0) 编辑
摘要:题意:输入一个数n,判断是否能通过乘以2,除以6,把该数变成1。如果不能,输出-1;如果可以变成1,请输出从n变成1的次数。 题解:可以乘以2,也可以除以6。除以6可以看作除以2和除以3,于是我们也可以通过乘以2,把除以6变成除以3。那么我们可以求该数是否能够通过除以2和除以3得到1,如果不能得到1 阅读全文
posted @ 2021-02-28 16:26 Uiney 阅读(84) 评论(0) 推荐(0) 编辑
摘要:题意:输入一个数n,再输入n个数,表示第i层有a[i]个虫。输入一个数m,表示查询m次,再输入一个数q,查询q所在的层数并输出。 题解:在几次尝试中,发现在查询中,最好不要有循环(会超时),最好是可以直接输出。需要在查询外处理好。 在输入时,把每层的虫都标记上相应的层数,比如第一层有5只虫,就让a[ 阅读全文
posted @ 2021-02-17 16:26 Uiney 阅读(59) 评论(0) 推荐(0) 编辑
摘要:题意:输入一串字符,有n次查询,每次输入l,r。求在从l到r的范围内,满足前一个字符和后一个字符相同的条件的字符有多少个。 题解:最开始用暴力遍历,然后超时了。应该使用前缀和(类似前缀和的一个东西?),在输入的时候,就可以判断前一个字符和这一个字符是否相同,然后累加符合条件的和。当查询到对应区间时, 阅读全文
posted @ 2021-02-16 19:46 Uiney 阅读(43) 评论(0) 推荐(0) 编辑
摘要:题意:就是让每个数一直除以2,直到变成奇数,啊啊啊啊啊。 ACcode: #include<stdio.h>#include<iostream>#include<cstdlib>#include<algorithm>#include<string.h>#include<cstring>#includ 阅读全文
posted @ 2021-02-13 23:48 Uiney 阅读(39) 评论(0) 推荐(0) 编辑
摘要:题意:给出两个数,m和s,m表示数字的位数(长度),s表示各个位上数字之和。输出符合条件的最大数和最小数。如果找不到符合条件的数就输出“-1 -1”。 题解:先考虑不符合条件的数,每个位上最大能放“9”,如果和大于位数x9,就找不到对应的值啦。当和大于0,但是位数等于0时,也不能找到对应的值啊。输出 阅读全文
posted @ 2021-02-04 16:18 Uiney 阅读(131) 评论(0) 推荐(0) 编辑