前言
地址:https://vjudge.net/contest/302045#overview
如果是英文劝退……那打扰了,我英语也不行,但英语字典是能带的。有电脑,就用网翻单词然后理解也是可以的吧。
以下是基于对题目的理解,简单提炼的题意,具体数据范围还是要自己看,看完中文题意,会发现还是有一些比较简单的。
至于代码和思路之后再说。
1165A
题意
你被给予了一个n位的十进制数字,没有前导0,每位数字只有0或者1。
你可以对这个数字进行一些操作,对于每个操作,可以将0变成1,或者1变成0,在进行一定的操作后,你可能获得一个前导位0的数字,但这个无关紧要。
现在,你被基于两个整数 0<=y 第一行输入十进制数的位数,x和y 输出最少的操作数 因为只关注对10x取模为10y次方,那么我们只关注,怎么只操作n位数字的后x位,除了对倒数第y+1位要置1外,其他都置为0。我们将后y位数字里面为1的数量记录为time,如果要置1的位置的数字为0则操作数time+1,如果要置1的位置的数字位1,则重复操作,输出time-1. 现在有n场比赛的题目,并分别有ai个题目, 这题有两个方法,看到另一个同学的方法,感觉我的有些愚钝。 如果一个字符串的长度是偶数,并且所有在奇数位置的字符和它的下一位的字符不是相同的,那么这个字符串是好字符串。 这题的方法比较贪心,我们知道像abccd这种字符串,我们只需要删一个就能变成一个好字符串。可以是ab之一,也可以是c。对于连续的重复的字符串,只要它符合好字符串的规则,也就是前一个在偶数位置,后一个在奇数位置,那么就不需要特别处理。当然多与两个便一定要删减了。 我们猜测有这么一个数字x,你被给予了几乎所有这个数字的除数,这个几乎的意思是,除了1和x以外,x的所有因子都已经被给予了,并且我们保证,输入的每一个数字都是不同的,如果这个输入不符合要求,或者找不到这样的数,那么输出-1。 这题主要是问你,如何通过这些数字。 你被给予了两个数组,分别是a和b,它们的长度都为n,我们定义f(l,r)的值为,对所有满足(l<=i<=r)的情况下的ai*bi求和。 我们知道,对于两个元素数量相同的数组,如何排序让它们的各位相乘求和的值最小,那么只能是一个数组正序,一个数组倒序,然后逐个相乘求和。 简单版和难版题目的区别只在于数据范围。 对于结果来说,最重要的是天数。如果主角想要n个物品,那么所需要天数必定在n~2n以内,我们只需要找到其中最小的可以买完东西的天数就行了。
第二行输入十进制数字,左边最高阶思路
源代码
#include
1165B
题意
主人公每天选择其中一场比赛来做,对于第k天,主人公会去AC比赛里面的k道题目,然后就不做了。
如果第k天选择的这场比赛题目少于k题,那么主人公就不参加了。
请问主人公最多能参加几场比赛。思路
第一种,则是小到大排序,然后遍历数组,每遇到能满足做题数量的比赛,则天数加一。
第二种,则是用数组来记录有n道题的比赛数量,然后遍历一次数组,算是基数排序吧。源代码,第一种
#include
源代码,第二种
#include
1165C
题意
现在给你一个字符串s,请问最少要删除几个字符才能将它变成好字符串,请将删除的个数k和删除后的字符串输出,如果为空则换行。思路
我们可以采取贪心的策略,重新组合一个字符串。当我们取奇数位置时,可以随意取,取偶数位置时候,如果和奇数位置相同,则不取。源代码
#include
1165D
题意
思路
得到X,求有没有重复数字,是否都属于它的因子,有没有漏的因子
分析步骤:
排序
如果数组符合要求,那么这个X必定是最大最小值相乘可得
如果出现1那么必定不符合要求
说了没有重复,有重复当然不符合
只要它符合X,那么一定有n/2组数相乘的结果为X
如果以上都符合,那么我分解质因数,计算所有不同因子的数量cnt,去掉1和X为cnt-2源代码
#include
1165E
题意
对满足(l<=r)的所有情况下f(l,r)的求和,
你可以随意移动数组b里面的数字的位置,然后用求和的结果对998244353取模。
请输出求和得到的最小结果对998244353取模后的值(不是求余数最小,而是结果最小)思路
对于这题,a和b只能移动b数组的顺序,那么其实是一样的,只要b第i大的数字对应a第i小的数字就行了。
但是题目给出了f(l,r)这个函数,并且是所有这个函数相加。不难得到,在n个元素的数组种,对于第i个元素,必定有i*(n-i+1)个区间将这个元素包含在内,也就是说,和第i个元素相关的乘积将出现以上次累加。
对于a这个数组来说,它是不能动的,何不先把这些累计的次数与a里的元素相乘呢。
我们将a内元素和对应累计次数相乘得到的新数组c排正序,b排倒序,再逐位相乘相加,取个模,那就是我们要求的答案了。源代码
#include
1165F(easy version)
题意
主人公Ivan,玩一个电脑游戏,包括很多微交易,可以得到让角色变得更帅的饰品,他想自己的角色看起来更酷,他想利用这些微交易得到饰品,并且他在得到所有东西后才开始玩这个游戏。
每一天早上,Ivan可以赚到游戏里一单位的burle(游戏货币)
有n种微交易,对于每一种微交易的花费,打折时每个饰品花费1单位burle,平时则花费2单位burle。对于第i个饰品,他想要进行ki次交易,订单将在晚上完成。
游戏商店有m次折扣,第j次输入(dj,tj)代表第t种商品在第d天打折。
Ivan想要尽早得到所有的物品,你的任务是计算最少经过多少时间他能买到所有想要数量的饰品,并开始游戏。
……………………有人说还是不懂我简单说下
主角想买一些东西,然后从第一天开始每天领一块钱
平时每件东西是两块,打折日对某些种类当天就一块。
给了你打折日,还有他想买的东西,给好种类和数量了
打折日也说明了日期和种类了
问你最短多少时间内能买完这些东西思路
对于固定的天数day,我们能接触到的打折活动必定在第day天及之前能接触到。那么对于同一件物品,打折的时间越后,能一次性买的数量越多。我们不妨在这天尽量买足所需数量。但是请注意,在第day天前举办的打折活动,并不能使用day个货币,也就是无法超前消费,那么,对于第day天剩余拥有的货币bday,和第fday天举办的活动(fday源代码
#include